SWIFT. Можно ли сохранить аудио из AVAudioEngine или из AudioPlayerNode? Если да, то как?

Я просматривал документацию Swift, чтобы сохранить аудиовыход из AVAudioEngine, но не нашел полезного совета.
Есть предложения?

Решение Я нашел способ благодаря ответу Мэтта. Вот пример кода, как сохранить звук после его прохождения через AVAudioEngine (я думаю, что технически это было раньше)

newAudio = AVAudioFile(forWriting: newAudio.url, settings: nil, error: NSErrorPointer()) 
//Your new file on which you want to save some changed audio, and prepared to be bufferd in some new data...

var audioPlayerNode = AVAudioPlayerNode() //or your Time pitch unit if pitch changed   

//Now install a Tap on the output bus to "record" the transformed file on a our newAudio file.
audioPlayerNode.installTapOnBus(0, bufferSize: (AVAudioFrameCount(audioPlayer.duration)), format: opffb){
        (buffer: AVAudioPCMBuffer!, time: AVAudioTime!)  in 

        if (self.newAudio.length) < (self.audioFile.length){//Let us know when to stop saving the file, otherwise saving infinitely

        self.newAudio.writeFromBuffer(buffer, error: NSErrorPointer())//let's write the buffer result into our file

        }else{
             audioPlayerNode.removeTapOnBus(0)//if we dont remove it, will keep on tapping infinitely
            println("Did you like it? Please, vote up for my question")
        }

    }

Надеюсь, это поможет!

Необходимо решить одну проблему:

Иногда ваш outputNode короче, чем input: если вы ускорите темп времени в 2 раза, ваш звук будет в 2 раза короче. Это проблема, с которой я столкнулся сейчас, так как мое условие для сохранения файла (строка 10)

if(newAudio.length) < (self.audioFile.length)//audiofile being the original(long) audio and newAudio being the new changed (shorter) audio.

Здесь есть помощь?


person mlk    schedule 08.05.2015    source источник
comment
Здесь: Документ Apple для экспорта из AV   -  person Eric Aya    schedule 08.05.2015
comment
Спасибо @eric D., я просматриваю код. Похоже, это сделает работу. Тем не менее, есть много вещей, которые я открываю, и многие линии, которые я должен понять. Ничего, если я задам вопросы? Например, как я могу загрузить актив, который не является аудиофайлом с URL-адресом, а является audioEngine или AudioNode? Вы когда-нибудь проходили этот код?   -  person mlk    schedule 09.05.2015
comment
Лично я не совсем, я просто подумал, что вы, возможно, пропустили этот документ, поэтому я вставил ссылку. Но проблема не в этом: дело в том, что на SO нельзя задавать слишком общие вопросы. Да и комментарии не место для этого в любом случае. Я предлагаю вам создать новый вопрос, включая ваш текущий код, показывающий, чего вы пытаетесь достичь и где вы боретесь, или что-то в этом роде. О, и одна тема на сообщение. Добро пожаловать в SO, кстати. :)   -  person Eric Aya    schedule 09.05.2015
comment
Спасибо, я только что зарегистрировался, и это мой самый первый вопрос. I Это не кажется широким вопросом: AVAudioEngine для аудиофайла? Я опубликую новый вопрос более точно с кодом! Еще раз большое спасибо, ваш документ очень актуален, жаль, что я не могу проголосовать за ваш ответ.   -  person mlk    schedule 09.05.2015
comment
Я имел в виду, что этот вопрос является широким. :) И именно поэтому я разместил в комментариях только ссылку на документы. Вопрос не подходил для правильного ответа. В любом случае, все это очень хорошо описано в обзоре и справочном центре. . Повеселись!   -  person Eric Aya    schedule 09.05.2015


Ответы (2)


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

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

person matt    schedule 09.05.2015
comment
Спасибо чувак, мне очень помогло. Одно но, я не думаю, что вам нужно играть, если вы установите кран на аудионоде. Я еще не пробовал, но на самом деле мне это не нужно, так как я все равно проигрываю звук перед его сохранением. как проверка на вменяемость. - person mlk; 11.05.2015
comment
Что ж, я попробую еще раз, но в моем тестировании я не мог заставить файл сохраняться без фактического воспроизведения буферов. - person matt; 11.05.2015
comment
Можете ли вы привести пример сохранения нового аудио? - person Bhavin Ramani; 31.05.2019

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

person Abdusha M A    schedule 28.08.2016