Skip to content

Commit

Permalink
VAD socket
Browse files Browse the repository at this point in the history
  • Loading branch information
kaiidams committed Aug 6, 2023
1 parent 55179fb commit 73e48a5
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 2 deletions.
37 changes: 36 additions & 1 deletion NeMoOnnxSharp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Net.Sockets;
using System.Collections.Generic;

namespace NeMoOnnxSharp
{
internal class Program
internal static class Program
{
private static string AppName = "NeMoOnnxSharp";

Expand Down Expand Up @@ -57,6 +59,12 @@ static async Task Main(string[] args)
}
else if (settings.Model == "vad_marblenet")
{
if (settings.Task == "socketaudio")
{
RunSocketAudio(modelPath);
return;
}

string inputDirPath = Path.Combine(basePath, "..", "..", "..", "..", "test_data");
string inputPath = Path.Combine(inputDirPath, "transcript.txt");

Expand Down Expand Up @@ -85,6 +93,33 @@ static async Task Main(string[] args)
}
}

private static void RunSocketAudio(string modelPath)
{
using var vad = new FrameVAD(modelPath);
using Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
socket.Connect("127.0.0.1", 17843);
Console.WriteLine("Connected");
byte[] responseBytes = new byte[1024];
var audioSignal = new List<short>();
while (true)
{
int bytesReceived = socket.Receive(responseBytes);
if (bytesReceived == 0) break;
if (bytesReceived % 2 != 0)
{
// TODO
throw new InvalidDataException();
}
audioSignal.AddRange(MemoryMarshal.Cast<byte, short>(responseBytes.AsSpan(0, bytesReceived)).ToArray());
if (audioSignal.Count > 16000)
{
string text = vad.Transcribe(audioSignal.ToArray());
Console.WriteLine("text: {0}", text);
audioSignal.Clear();
}
}
}

private static float[] ReadBinaryBuffer(string path)
{
using var stream = File.Open(path, FileMode.Open);
Expand Down
1 change: 1 addition & 0 deletions NeMoOnnxSharp/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ namespace NeMoOnnxSharp
internal class Settings
{
public string Model { get; set; }
public string Task { get; set; }
}
}
3 changes: 2 additions & 1 deletion NeMoOnnxSharp/appsettings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"Settings": {
"Model": "vad_marblenet"
"Model": "vad_marblenet",
"Task": "socketaudio"
}
}
73 changes: 73 additions & 0 deletions Python/audio_server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import pyaudio as pa
import socket
import time

SAMPLE_RATE = 16000
CHANNELS = 1
CHUNK_SIZE = 1024
PORT = 17843


def main():
p = pa.PyAudio()

input_devices = []
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev.get('maxInputChannels', 0) >= 1:
device_name = dev.get('name')
input_devices.append(device_name)

if not input_devices:
print('No audio input device found.')

if False:
print('Available audio input devices:')
for i, device_name in enumerate(input_devices):
print(f'{i}: {device_name}')

device_index = 0
device_name = input_devices[device_index]
print(f'Using audio input device: {device_index} {device_name}')

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(("0.0.0.0", PORT))
serversocket.listen(1)
print(f'Listening TCP port {PORT}')


while True:
(clientsocket, address) = serversocket.accept()

empty_counter = 0

def callback(in_data, frame_count, time_info, status):
clientsocket.send(in_data)
return (in_data, pa.paContinue)

stream = p.open(format=pa.paInt16,
channels=CHANNELS,
rate=SAMPLE_RATE,
input=True,
input_device_index=device_index,
stream_callback=callback,
frames_per_buffer=CHUNK_SIZE)

stream.start_stream()

try:
while stream.is_active():
time.sleep(0.1)
except:
pass
finally:
stream.stop_stream()
stream.close()
p.terminate()

print("Connection closed")

clientsocket.close()


main()

0 comments on commit 73e48a5

Please sign in to comment.