Sto utilizzando AVAudioRecorder. Registra il suono nel formato caf. Dopo di che ho convertire il file caf in formato AAC utilizzando TPAACAudioConverter. Funziona bene ma la durata del file convertito è 00:00. C'è un modo per ottenere la durata del file audio Aac.Ho convertito CAF in formato AAC utilizzando TPAACAudioConverter ma la durata del file convertito è 0
risposta
L'AAC non supporta per qualche simulator.You possono controllare su il tuo dispositivo. Funzionerà correttamente e potresti ottenere la durata del file audio AAC.
È possibile riprodurre il file caf?
Se si desidera solo per registrare un suono dal microfono in un file AAC, è possibile utilizzare servizi coda audio (posso inviare un codice)
Edit: si tratta di un'implementazione da parte di Apple dev tutorial, ci potrebbe essere qualche errori da quando ho modificato per adattarsi alla tua domanda
//AudioQ.mm
@implementation AudioQ
static const int nBuffer = 3;
struct AQRecorderState{
AudioStreamBasicDescription mDataFormat;
AudioQueueRef mQueue;
AudioQueueBufferRef mBuffers[nBuffer];
AudioFileID mAudioFile;
UInt32 bufferByteSize;
SInt64 mCurrentPacket;
bool mIsRunning;
};
AQRecorderState aqData;
CFURLRef url;
static OSStatus BufferFilledHandler(
void * inUserData,
SInt64 inPosition,
UInt32 requestCount,
const void * buffer,
UInt32 * actualCount
){
// callback when you write to the file
// you can handle audio packet and send them for broadcasting
return 0;
}
static void HandleInputBuffer(
void *aqData,
AudioQueueRef inAq,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription *inPacketDesc
) {
AQRecorderState *pAqData = (AQRecorderState*) aqData;
if (AudioFileWritePackets (
pAqData->mAudioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDesc,
pAqData->mCurrentPacket,
&inNumPackets,
inBuffer->mAudioData
) == noErr) {
pAqData->mCurrentPacket += inNumPackets;
} else {
NSLog(@"err writing packet");
}
if (pAqData->mIsRunning == 0)
return;
AudioQueueEnqueueBuffer(pAqData->mQueue,inBuffer,0,NULL);
}
-(OSStatus) initializeAQ{
//--- set the output format ---//
aqData.mDataFormat.mSampleRate = 22050;
aqData.mDataFormat.mFormatID = kAudioFormatMPEG4AAC;
aqData.mDataFormat.mFormatFlags = kMPEG4Object_AAC_Main;
aqData.mDataFormat.mBytesPerPacket = 0;
aqData.mDataFormat.mFramesPerPacket = 1024;
aqData.mDataFormat.mBytesPerFrame = 0;
aqData.mDataFormat.mChannelsPerFrame = 1;
aqData.mDataFormat.mBitsPerChannel = 0;
AudioFileTypeID fileType = kAudioFileAAC_ADTSType;
aqData.bufferByteSize = 0x5000; // ??
AudioQueueNewInput(&aqData.mDataFormat, HandleInputBuffer, &aqData, CFRunLoopGetMain(), kCFRunLoopCommonModes, 0, &aqData.mQueue);
aqData.mCurrentPacket = 0;
aqData.mIsRunning = true;
//--- record in a file get the callback when writing ---//
AQRecorderState *pAqData = &aqData;
AudioFileInitializeWithCallbacks((void*)&pAqData,
nil,
BufferFilledHandler,
nil,
nil,
fileType,
&aqData.mDataFormat,
kAudioFileFlags_EraseFile,
&aqData.mAudioFile);
//--- prepare set of audio queue buffers ---//
for(int i = 0 ; i < nBuffer ; i++){
AudioQueueAllocateBuffer(aqData.mQueue, aqData.bufferByteSize, &aqData.mBuffers[i]);
AudioQueueEnqueueBuffer(aqData.mQueue, aqData.mBuffers[i], 0, NULL);
}
return 0;
}
-(void) start{
AudioQueueStart(aqData.mQueue, NULL);
}
-(void) stop{
NSLog(@"stoping");
AudioQueueStop(aqData.mQueue, true);
aqData.mIsRunning = false;
AudioQueueDispose (aqData.mQueue,true);
AudioFileClose (aqData.mAudioFile);
}
@end
AudioQ.h
static void HandleInputBuffer(
void *aqData,
AudioQueueRef inAq,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription *inPacketDesc
);
static OSStatus BufferFilledHandler(
void * inUserData,
SInt64 inPosition,
UInt32 requestCount,
const void * buffer,
UInt32 * actualCount
);
-(OSStatus)initializeAQ;
-(void)stop;
-(void)start;
Sono stati creati per scopi di registrazione con un'ampia scelta di formati di output – HaneTV
modificato il mio primo post con esempio, si noti che è objectiveC++ – HaneTV
si può quasi copiare incollare il codice, non dimenticare di cambiare .m in .mm e importare " CoreAudio/CoreAudioTypes.h "" AudioToolbox/AudioQueue.h " " AudioToolbox/AudioFile.h "" AudioToolbox/AudioConverter.h "Sono nuovo di SO e non so come collegare ... – HaneTV
- 1. convertito XMLGregorianCalendar a java.sql.Timestamp
- 2. convertito al JSON
- 3. IS C++ convertito in MSIL?
- 4. Formato AAC in Android
- 5. convertito dataReader dizionario
- 6. AFNetworking (AFJSONRequestOperation) convertito in AFHTTPClient
- 7. Formato immagine convertito in Java con ingombro di memoria ridotto
- 8. Unicode non convertito quando visualizzato
- 9. convertito char in operatore aritmetico
- 10. Modello Django convertito in stringa
- 11. convertito javascript numero in formato valuta, ma senza "$" o qualsiasi simbolo di valuta
- 12. convertito bitonale TIFF in bianco e nero PNG in C#
- 13. Elixir convertito struct per mappare
- 14. Array JSON convertito in array Javascript
- 15. convertito alle parole, in Objective C
- 16. Swift convertito UInt a int
- 17. Database SQlite convertito in modo programmatico in Excel Formato file in Android
- 18. boost :: variant - perché "const char *" è stato convertito in "bool"?
- 19. Come registrare utilizzando AVAudioRecorder senza il contenitore .caf?
- 20. Il valore del tipo "T" non può essere convertito in
- 21. Quando lo std :: reference_wrapper è stato convertito in T &?
- 22. org.json.JSONObject non può essere convertito in JSONArray
- 23. Character + è convertito in% 2B in HTTP Post
- 24. @ convertito in% 40 nella richiesta HTTPPost
- 25. nome della funzione if è convertito in uno strano modo
- 26. convertito riferimento alla rappresentazione puntatore in C++
- 27. L'oggetto non può essere convertito in stringa?
- 28. RxJavaCallAdapterFactory non può essere convertito in fabbrica
- 29. ha convertito la mia app in ARC ma solo 1 target mostra l'impostazione ARC come SÌ?
- 30. convertito JavaScript Object per modellare in backbone
sto anche affrontando lo stesso problema ho provato il progetto di esempio TPAACAudioConverter ma non gioca sul mio dispositivo ?? – Ravindhiran