Ich versuche, rohe Pufferdaten in eine Audiodatei zu erfassen. Wie folgt aus:Audio in Datei aufnehmen ExtAudioFileWrite
dstFormat.mSampleRate = 224000;
dstFormat.mFormatID = kAudioFormatMPEG4AAC;
dstFormat.mChannelsPerFrame = 1;
dstFormat.mBitsPerChannel = 16;
dstFormat.mBytesPerPacket = dstFormat.mBytesPerFrame = 2 * dstFormat.mChannelsPerFrame;
dstFormat.mFramesPerPacket = 1;
dstFormat.mFormatFlags = kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger;
OSStatus result = ExtAudioFileCreateWithURL((CFURLRef) inURL,
kAudioFileM4AType,
&dstFormat,
0,
kAudioFileFlags_EraseFile,
&audioFileRef)
bin ich in eine Funktion mit den folgenden Parametern angeschlossen: AudioUnit inUnit, AudioUnitRenderActionFlags * ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberFrames, AudioBufferList * ioData
Im Innern Ich versuche, die Daten in die Datei zu schreiben, aber ein schlechter Parameter -50 Fehler auftritt. Ergebnis = ExtAudioFileWrite (audioFileRef, inNumberFrames, ioData);
Wenn ich IODATA Parameter mit meinem eigenen ersetzen:
AudioBufferList *bufferList = (AudioBufferList*) malloc(sizeof(AudioBufferList));
bufferList->mNumberBuffers = 1;// ioData->mNumberBuffers;
for(UInt32 i=0;i<bufferList->mNumberBuffers;i++)
{
bufferList->mBuffers[i].mNumberChannels = 1;
bufferList->mBuffers[i].mDataByteSize = ioData->mBuffers[i].mDataByteSize; //ioData->mBuffers[i].mDataByteSize; // (1024*2) * dstFormat.mBytesPerFrame;
bufferList->mBuffers[i].mData = ioData->mBuffers[i].mData;
}
.. ich bekomme Datei um 260MB für die erste Sekunde. Was ist hier falsch?
danke mann, ich habe bereits das prob, aber du hast mir eine gute antwort –
Froh zu hören du hast es funktioniert. Was war das Problem genau? Sie sollten den Arbeitscode veröffentlichen. :) –
http://stackoverflow.com/questions/3815231/recording-mono-on-iphone-in-ima4-format Dieser Beitrag hat mir sehr geholfen –