Реализация записи аудио и воспроизведения в других 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

}

}

Попробуй это...

Другие вопросы по тегам