Реализация записи аудио и воспроизведения в других iDevices
Я хочу записать аудио и потоковую передачу на другой iPhone. Этот формат подходит для записи и потоковой передачи?
format -> mSampleRate = 44100.00; //
format -> mFormatID = kAudioFormatLinearPCM; //
format -> mFramesPerPacket = 1;
format -> mChannelsPerFrame = 1; //
format -> mBitsPerChannel = 16; //
format -> mReserved = 0;
format -> mBytesPerPacket = 2;
format -> mBytesPerFrame = 2;
format -> mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
позвоните для начала записи:
- (void) startRecordingInQueue {
[self setupAudioFormat:&recordState.dataFormat];
recordState.currentPacket = 0;
OSStatus status;
status = AudioQueueNewInput(&recordState.dataFormat, AudioInputCallback, &recordState, CFRunLoopGetCurrent(),kCFRunLoopCommonModes, 0, &recordState.queue);
status = 0;
if(status == 0) {
//Prime recording buffers with empty data
AudioQueueBufferRef buffer;
for (int i=0; i < NUM_BUFFERS; i++) {
AudioQueueAllocateBuffer(recordState.queue, SAMPLERATE, &recordState.buffers[i]);
AudioQueueEnqueueBuffer(recordState.queue, recordState.buffers[i], 0, NULL);
}
status = AudioFileCreateWithURL(fileURL, kAudioFileAIFFType, &recordState.dataFormat, kAudioFileFlags_EraseFile, &recordState.audioFile);
NSLog(@"ss %i",status);
status = 0;
if (status == 0) {
recordState.recording = true;
status = AudioQueueStart(recordState.queue, NULL);
if(status == 0) {
NSLog(@"-----------Recording--------------");
NSLog(@"File URL : %@", fileURL);
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",fileURL] relativeToURL:NULL];
[[NSUserDefaults standardUserDefaults] setURL:url forKey:@"fileUrl"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
}
if (status != 0) {
[self stopRecordingInQueue];
}
}
если это нормально ،
Как вывести данные аудио буфера для отправки на сервер в этом коде? А как воспроизвести свои данные на других устройствах?
void AudioInputCallback(void * inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp * inStartTime,
UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription * inPacketDescs)
{
RecordState * recordState = (RecordState*)inUserData;
if (!recordState->recording)
{
printf("Not recording, returning\n");
}
printf("Writing buffer %lld\n", recordState->currentPacket);
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData);
if (status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
}
}
если у кого-то есть полный код для этого проекта, пожалуйста, свяжите меня с источником. Спасибо
1 ответ
Этот мой код вы пытаетесь изменить формат
Здесь я остановил запись звука, после чего отправляю на сервер. Это мое требование. Для этого я конвертирую аудио файл в.wav. После отправки на сервер также он играет успешно. Попытайся...
- (IBAction)stop:(id)sender { // On tap stop button
NSString *urlString;
NSLog(@"Stop Recording");
if ([audioRecorder isRecording]) // If recording audio
{
[audioRecorder stop]; //Stop it
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:NO error:nil];
NSLog(@"%@", audioRecorder.url);
unsigned long long size = [[NSFileManager defaultManager] attributesOfItemAtPath:[audioRecorder.url path] error:nil].fileSize;//Get audio file path
NSLog(@"This is the file size of the recording in bytes: %llu", size); // Audio file size in bytes
Здесь мой файл сохранен в каталоге документов с именем "Аудио". Поэтому я не получил этот файл, и я изменил имя файла на 56e254fa816e8_1519650589.wav, и я отправляю этот файл на сервер.
self.sendFileName = [@"56e254fa816e8" stringByAppendingString:@"_"];
self.sendFileName = [self.sendFileName stringByAppendingString:[@(self.unixTimeStamp) stringValue]];
self.sendFileName = [self.sendFileName stringByAppendingString:@".wav"]; // Here name converted in to .wav completely
NSLog(@"%@", self.sendFileName);//See here the file formate
urlString = [audioRecorder.url.absoluteString stringByReplacingOccurrencesOfString:@"Audio" withString:self.sendFileName];
self.sendingURL = [NSURL URLWithString:urlString];
NSLog(@"%@", self.sendingURL);//Complete file url
}
}
Попробуй это...