Отдельные каналы AVAudioEngine

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

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

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

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

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

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

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

Спасибо!


person Jan    schedule 10.10.2016    source источник
comment
Вам удалось объединить 2 монопотока обратно в один стереопоток?   -  person A21    schedule 15.02.2017
comment
к сожалению, не с avaudioengine. с аудиокитом можно   -  person Jan    schedule 15.02.2017
comment
К сожалению, я использую Objective C для своего проекта и думаю, что AudioKit предназначен только для Swift.   -  person A21    schedule 15.02.2017


Ответы (1)


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

person Tim    schedule 15.10.2016
comment
можем ли мы по-прежнему использовать AudioConverter, если мы не пытаемся изменить формат файла? В моем случае я пытаюсь объединить 2 монофайла CAF с одинаковой частотой дискретизации и длиной в один стереофайл. Есть ли пример кода для AudioConverterNew, который показывает, как установить форматирование? - person A21; 15.02.2017
comment
Да. В документации AudioConverter перечислены поддерживаемые им преобразования. Я считаю, что есть образец Apple, показывающий, как его использовать, но у меня нет под рукой ссылки. - person Tim; 15.02.2017
comment
Я просматриваю документацию для AudioConverterNew здесь developer.apple.com/ ссылка/аудиотулбокс/. Для этой функции есть 3 параметра, однако inSourceFormat, похоже, предполагает, что она принимает только один исходный файл. Однако в моем случае у меня есть 2 отдельных аудиофайла с уникальными монопотоками. Я явно что-то упускаю, к сожалению, на сайте Apple не так много документации. - person A21; 15.02.2017
comment
AudioConverter не работает с файлами. Он работает с буферами данных. Эти буферы могут исходить из файлов, вы можете их предоставить. - person Tim; 15.02.2017
comment
Звучит хорошо, я думаю, подход сейчас состоит в том, чтобы выяснить, как взять мои входные файлы и извлечь буферы, а затем не чередовать их в один выходной буфер. Когда я работаю с этими входными буферами, нужно ли мне беспокоиться о заголовках? - person A21; 15.02.2017
comment
@ A21 Вы когда-нибудь узнавали, как это сделать? - person Leonhard Printz; 17.08.2018