コード例 #1
0
ファイル: player.c プロジェクト: Yoonster/dhun
void playFile(const char* filePath) {

  CFURLRef audioFileURL = CFURLCreateFromFileSystemRepresentation(NULL,
                                                                  (UInt8*) filePath,
                                                                  strlen (filePath),
                                                                  false);


  OSStatus result = AudioFileOpenURL(audioFileURL,
                                     fsRdPerm,
                                     0,
                                     &aqData.mAudioFile);

  CFRelease (audioFileURL);

  UInt32 dataFormatSize = sizeof (aqData.mDataFormat);

  AudioFileGetProperty(aqData.mAudioFile,
                       kAudioFilePropertyDataFormat,
                       &dataFormatSize,
                       &aqData.mDataFormat);

  AudioQueueNewOutput(&aqData.mDataFormat,
                      HandleOutputBuffer,
                      &aqData,
                      CFRunLoopGetCurrent(),
                      kCFRunLoopCommonModes,
                      0,
                      &aqData.mQueue);

  UInt32 maxPacketSize;
  UInt32 propertySize = sizeof (maxPacketSize);
  AudioFileGetProperty(aqData.mAudioFile,
                       kAudioFilePropertyPacketSizeUpperBound,
                       &propertySize,
                       &maxPacketSize);


  DeriveBufferSize(&aqData.mDataFormat,
                   maxPacketSize,
                   0.5,
                   &aqData.bufferByteSize,
                   &aqData.mNumPacketsToRead);

  bool isFormatVBR = (aqData.mDataFormat.mBytesPerPacket == 0 ||
                      aqData.mDataFormat.mFramesPerPacket == 0);

  if (isFormatVBR) {
    // LOG("%s\n","VBR");
    aqData.mPacketDescs =
      (AudioStreamPacketDescription*)
      malloc (aqData.mNumPacketsToRead * sizeof (AudioStreamPacketDescription));
  } else {
    aqData.mPacketDescs = NULL;
  }

  UInt32 cookieSize = sizeof (UInt32);
  bool couldNotGetProperty =
    AudioFileGetPropertyInfo (aqData.mAudioFile,
                              kAudioFilePropertyMagicCookieData,
                              &cookieSize,
                              NULL);

  if (!couldNotGetProperty && cookieSize) {
    char* magicCookie = (char *) malloc (cookieSize);

    AudioFileGetProperty (aqData.mAudioFile,
                          kAudioFilePropertyMagicCookieData,
                          &cookieSize,
                          magicCookie);

    AudioQueueSetProperty (aqData.mQueue,
                           kAudioQueueProperty_MagicCookie,
                           magicCookie,
                           cookieSize);

    free (magicCookie);
  }

  aqData.mCurrentPacket = 0;
  aqData.mIsRunning = true;

  //LOG("%d\n", aqData.mNumPacketsToRead);
  for (int i = 0; i < kNumberBuffers; ++i) {
    AudioQueueAllocateBuffer (aqData.mQueue,
                              aqData.bufferByteSize,
                              &aqData.mBuffers[i]);

    HandleOutputBuffer (&aqData,
                        aqData.mQueue,
                        aqData.mBuffers[i]);
  }

  Float32 gain = 1.0;
  // Optionally, allow user to override gain setting here
  AudioQueueSetParameter (aqData.mQueue,
                          kAudioQueueParam_Volume,
                          gain);


  //LOG("%s\n","Starting play");


  // IMPORTANT NOTE : This value must be set
  // Before the call to HandleOutputBuffer
  //a qData.mIsRunning = true;

  AudioQueueStart (aqData.mQueue,
                   NULL);

}
コード例 #2
0
ファイル: AQCode.cpp プロジェクト: johnhowe/Cutemaze
void Recorder::start()
{
	AudioQueueNewInput (                                              // 1
						&aqData.mDataFormat,                          // 2
						HandleInputBuffer,                            // 3
						&aqData,                                      // 4
						NULL,                                         // 5
						kCFRunLoopCommonModes,                        // 6
						0,                                            // 7
						&aqData.mQueue                                // 8
	);

	UInt32 dataFormatSize = sizeof (aqData.mDataFormat);       // 1
	 
	AudioQueueGetProperty (                                    // 2
	  aqData.mQueue,                                           // 3
	  kAudioConverterCurrentOutputStreamDescription,           // 4
	  &aqData.mDataFormat,                                     // 5
	  &dataFormatSize                                          // 6
	);
	
	const char *filePath = "recording.wav";
	
	audioFileURL =
		CFURLCreateFromFileSystemRepresentation (            // 1
			NULL,                                            // 2
			(const UInt8 *) filePath,                        // 3
			strlen (filePath),                               // 4
			false                                            // 5
		);
	AudioFileCreateWithURL (                                 // 6
		audioFileURL,                                        // 7
		fileType,                                            // 8
		&aqData.mDataFormat,                                 // 9
		kAudioFileFlags_EraseFile,                           // 10
		&aqData.mAudioFile                                   // 11
	);
	
	DeriveBufferSize (                               // 1
		aqData.mQueue,                               // 2
		aqData.mDataFormat,                          // 3
		0.5,                                         // 4
		&aqData.bufferByteSize                       // 5
	);

	for (int i = 0; i < kNumberBuffers; ++i) {           // 1
		AudioQueueAllocateBuffer (                       // 2
			aqData.mQueue,                               // 3
			aqData.bufferByteSize,                       // 4
			&aqData.mBuffers[i]                          // 5
		);
	 
		AudioQueueEnqueueBuffer (                        // 6
			aqData.mQueue,                               // 7
			aqData.mBuffers[i],                          // 8
			0,                                           // 9
			NULL                                         // 10
		);
	}

	aqData.mCurrentPacket = 0;                           // 1

	aqData.mIsRunning = true;

	AudioQueueStart (                                    // 3
		aqData.mQueue,                                   // 4
		NULL                                             // 5
	);
}