• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: sample code on how to write an MP3 file?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: sample code on how to write an MP3 file?


  • Subject: Re: sample code on how to write an MP3 file?
  • From: Doug Wyatt <email@hidden>
  • Date: Tue, 4 Jan 2005 09:11:35 -0800

The key thing to understand about how CoreAudio deals with audio files and formats -- as we stressed at WWDC last year ;-) -- is that they are utterly separate concepts.

A file is just a container and is not assumed to have any knowledge of how to encode or decode the audio data inside it.

Codecs know how to convert between PCM and encoded formats, but have no idea of how to store the data in files.

Your code looks like it's writing PCM data packets to the MP3 container.

CoreAudio's MP3 file object knows how to write a valid MP3 file -- given a series of MP3 packets. But (probably due to licensing considerations) there is no MP3 encoder in the base system.

You might be better off sending AppleEvents to iTunes or using AAC (though using the AAC encoder has its own set of hoops to jump through, and the only *currently* supported container for AAC is ADTS ...).

Doug


On Jan 3, 2005, at 21:51, David M.Cotter wrote:
i've searched the doc, i've searched google, i've searched the archives, to no avail.

i'm trying to do CD ripping.

I found this:
http://www.mat.ucsb.edu:8000/CoreAudio/90

which is utterly fantastic, except it records AIFF instead of MP3

so I try to record MP3 this way:
			AudioStreamBasicDescription		asbd;
			AudioFileTypeAndFormatID		fmID;
			UInt32						sizeL = sizeof(asbd);

			fmID.mFileType	= kAudioFileMP3Type;
			fmID.mFormatID	= kAudioFormatMPEGLayer3;

			if (!err) err = AudioFileGetGlobalInfo(
				kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat,
				sizeof(fmID), &fmID, &sizeL, &asbd);

at this point the asbd looks nothing like i'd expect, but the following call works

			if (!err) err = AudioFileInitialize(
				&i_destAudioFileSpec, kAudioFileMP3Type,
				&asbd, 0, &i_audioFileID);
etc etc, and I use

OSErr		CSongImporter::DumpAudioSector(unsigned char *bufP)
{
	OSErr		err = noErr;
	UInt32		num_bytesL = kCDSectorSizeCDDA;

	err = AudioFileWriteBytes(
		i_audioFileID, true, i_audio_bytePos, &num_bytesL, bufP);

	if (!err) err = num_bytesL != kCDSectorSizeCDDA;
	if (!err) i_audio_bytePos += num_bytesL;
	return err;
}

the bufP is what is returned by:
			dk_cd_read_t		readCDParam;
			UInt64			bufLen = kCDSectorSizeCDDA;

			structclr(readCDParam);
			readCDParam.offset			= bufLen * cur_sectorL;
			readCDParam.sectorArea	= kCDSectorAreaUser;
			readCDParam.sectorType	= kCDSectorTypeCDDA;
			readCDParam.bufferLength	= bufLen;
			readCDParam.buffer		= i_buffer;

			err = ioctl(i_fd, DKIOCCDREAD, (char*)&readCDParam) == -1;

so it's raw audio bytes, i suppose it's raw PCM data?

but then i end up with a 50 meg file that's NOT playable. so huh, what am I doing wrong?

is there sample code somewhere?

_______________________________________________ Do not post admin requests to the list. They will be ignored. Coreaudio-api mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
  • Follow-Ups:
    • Re: sample code on how to write an MP3 file?
      • From: "David M.Cotter" <email@hidden>
References: 
 >sample code on how to write an MP3 file? (From: "David M.Cotter" <email@hidden>)

  • Prev by Date: Re: 2nd Post: Help: Sample accurate playhead positioning?
  • Next by Date: Re: sample code on how to write an MP3 file?
  • Previous by thread: sample code on how to write an MP3 file?
  • Next by thread: Re: sample code on how to write an MP3 file?
  • Index(es):
    • Date
    • Thread