2016-10-10 2 views
0

У меня есть стерео аудиофайл, для которого я пытаюсь отделить аудиоканалы. Результат в шине с левым звуком и шина с правильным аудиосигналом. На этих каналах я хочу выполнить некоторые операции, а затем снова объединить их с одним стереосигналом.AVAudioEngine отдельные каналы

Чтение аудиофайла, выполнение операций на шине и слияние его с одним сигналом не проблема (хотя я не тестировал, если этот сигнал является стереофоническим, поскольку он зависит от предыдущих каналов, которые я предполагаю).

Моя проблема заключается в разделении левого и правого каналов, поэтому я могу самостоятельно их модифицировать.

Одна из моих идей было использовать pan свойство AVAudioPlayerNode иметь сигнал только влево/вправо, но кажется, что (как указано в документации) это свойство еще не реализовано в AVAudioPlayerNode (Даже если во всех примеры видео WWDC используются).

Другое решение, которое я нашел, было this. С помощью memcpy создайте новые буферы. Я еще не пробовал это, так как я предполагаю, что это занимает довольно много времени и не подходит для обычного игрока.

В-третьих, существует рама под названием audiokit. Это дает возможность конвертировать поток в моно левый/правый канал, а затем снова слить сигнал, создав AKStereoOperation. Моя проблема с этим решением заключается в том, что это довольно простой случай использования. Разделение аудиоканалов. Для этого мне трудно обосновать, включая такую ​​огромную структуру, хотя она, вероятно, будет работать (не проверена).

Есть ли простой способ разделить каналы?

Спасибо!

+0

Вы могли когда-либо объединить 2 монопотока обратно в один стерео поток? – A21

+0

печально не с avaudioengine. с audiokit можно – Jan

+0

К сожалению, я использую объектив C для своего проекта, и я думаю, что AudioKit предназначен только для Swift. – A21

ответ

0

Вы можете взять необработанные образцы и создать AudioConverter с использованием AudioConverterNew с выходом AudioStreamBasicDescription, настроенным на де-чередование стереоканалов. Это приведет к тому, что один буфер с одним каналом будет соприкасающимся первым, а второй - во второй половине буфера.

+0

можно ли использовать AudioConverter, если мы не пытаемся изменить формат файла? В моем случае я пытаюсь объединить 2 моно CAF-файлов с одинаковой частотой дискретизации и длиной в один стереофайл. Есть ли пример кода для AudioConverterNew, который показывает вам, как установить форматирование? – A21

+0

Да. В документации 'AudioConverter' перечислены конверсии, которые он поддерживает. Я считаю, что есть образец Apple, показывающий, как его использовать, но у меня нет ссылки. – Tim

+0

Я смотрю документацию для AudioConverterNew здесь https://developer.apple.com/reference/audiotoolbox/1502936-audioconverternew?language=objc. Для этой функции есть 3 параметра, однако inSourceFormat, по-видимому, предполагает, что он принимает только сингулярный исходный файл. Однако в моем случае у меня есть 2 отдельных аудиофайла с уникальными монопотоками. Я явно пропустил что-то здесь, к сожалению, на сайте Apple не так много документации. – A21

Смежные вопросы