Monotouch: попытка воспроизвести аудио из файла, который генерируется «на лету» с помощью AVAudioPlayer

#c# #streaming #xamarin.ios #avaudioplayer

#c# #потоковая передача #xamarin.ios #avaudioplayer

Вопрос:

Я столкнулся со следующей проблемой.. Я хочу записать аудиофайл с микрофона с помощью AVAudioRecorder и передавать выходные данные в AVAudioPlayer в режиме реального времени. Я попробовал это, открыв поток

FileStream f = новый FileStream (имя файла, FileMode.Откройте, доступ к файлу.Прочитайте, общий файловый ресурс.ReadWrite);

где fileName — это имя файла, который записывается устройством записи. Затем я попытался инициализировать AVAudioPlayer:

Проигрыватель AVAudioPlayer = AVAudioPlayer.Из данных (NSData.FromStream(f));

Это всегда возвращало значение null player, поэтому я преобразовал FileStream в BufferedStream, например

BufferedStream bf = новый BufferedStream(f);

Затем я инициализировал проигрыватель, используя приведенную выше строку кода, но вместо передачи потока f я передал поток bf.

Это заставило проигрыватель, по крайней мере, получить значение, отличное от null, но я ничего не мог услышать.

Есть ли шанс, что кто-то сталкивался с такой же проблемой и знает решение? Могу ли я использовать AVAudioPlayer таким образом или я делаю все это неправильно?

Ответ №1:

Я знаю, что это старый вопрос, но я отвечаю на случай, если кто-то еще столкнется с этим вопросом.

Для воспроизведения только что записанного аудио создайте аудиоплеер по URL-адресу, основанному на имени файла, в который вы только что записали:

 AVAudioPlayer player = AVAudioPlayer.FRomUrl(NSUrl.FromFileName(fileName));
player.PrepareToPlay();
player.Play();
  

Надеюсь, это кому-нибудь поможет.