public static void ListenForInput(AudioInputBuffer_old buffer) { Thread thread = null; var audioQueueThread = new InputAudioQueueThread_old(buffer, thread); thread = new Thread(new ParameterizedThreadStart(HandleParameterizedThreadStart)); BufferThreads.Add(buffer, audioQueueThread); thread.Start(audioQueueThread); }
public static void StopListening(AudioInputBuffer_old buffer) { InputAudioQueueThread_old audioQueueThread = null; if (BufferThreads.ContainsKey(buffer)) { audioQueueThread = BufferThreads[buffer]; } if (audioQueueThread != null && audioQueueThread.IsRunning) { audioQueueThread.RequestStop(); audioQueueThread.IsRunning = false; BufferThreads.Remove(buffer); } }
//private static void HandleParameterizedThreadStart(object getAudioQueueThreadDelegate) //{ // var getDelegate = getAudioQueueThreadDelegate as GetAudioQueueThreadDelegate; // RunAudioQueueLoop(getDelegate()); //} private static void RunAudioQueueLoop(InputAudioQueueThread_old audioQueueThread) { var buffer = audioQueueThread.Buffer; //var queue = new TestInputAudioQueue(buffer.AudioUnit.GetAudioFormat(MonoMac.AudioUnit.AudioUnitScopeType.Input)); //audioQueueThread.AudioQueue = queue; //queue.InputCompleted += Queue_InputCompleted; #if DEBUG //PrintAudioQueueDataReadout(queue); #endif //DEBUG //var packetDescription = new AudioStreamPacketDescription //{ // DataByteSize = queue.AudioStreamDescription.BytesPerPacket //}; //var packetDescriptions = new AudioStreamPacketDescription[] { packetDescription }; //int bufferSizeInBytes = buffer.BufferLength * queue.DeviceChannels * packetDescription.DataByteSize; int bufferSizeInBytes = buffer.AudioUnit.GetAudioFormat(AudioUnitScopeType.Input).FramesPerPacket *sizeof(float); //var bufferstuff = new AudioBufferList(buffer.AudioUnit.GetAudioFormat(AudioUnitScopeType.Input).ChannelsPerFrame); var bufferstuff = new AudioBuffers(buffer.AudioUnit.GetAudioFormat(AudioUnitScopeType.Input).ChannelsPerFrame); int something = buffer.AudioUnit.Initialize(); audioQueueThread.Buffer.AudioUnit.Start(); // Allocate, enqueue, and start //ErrorHandler.CheckError(queue.AllocateBuffer(bufferSizeInBytes, out buffer.SystemBufferPointer)); //ErrorHandler.CheckError(queue.EnqueueBuffer(buffer.SystemBufferPointer, packetDescriptions)); //ErrorHandler.CheckError(queue.Start()); audioQueueThread.IsRunning = true; //CFRunLoop.Current.Run(); while (!audioQueueThread.StopRequested) { //Console.WriteLine("Thread is running."); Thread.Sleep(50); CFRunLoop.Current.Run(); CFRunLoop.Main.Run(); //Marshal.Copy(buffer.SystemBufferPointer, dest, 0, audioQueueThread.Buffer.BufferLength); //ErrorHandler.CheckError(queue.EnqueueBuffer(buffer.SystemBufferPointer, packetDescriptions)); } Console.WriteLine("Thread is stopping..."); // May need to clear CoreAudio buffer here. }