Thread: [Musickit-users] Quicktime Sound Access in SndKit (Mac OS X)
Brought to you by:
leighsmith
From: John R. <jri...@cs...> - 2003-06-12 15:22:00
|
Hi There, I'm writing a Mac OS X Application (in Cocoa) that involves Quicktime movies, and I'm trying to integrate SndKit, particularly the SndView stuff (which looks terrifically useful). Does anyone out there have experience getting SndKit to deal with Quicktime Sound files? The movies I'm dealing with all have 16 bit mono uncompressed soundtracks... Thanks! jr |
From: Yves de C. <yv...@gn...> - 2003-06-12 15:51:07
|
The format is well documented on developer.apple.com and there is also an article at www.macdevcenter.com that describes a java parser for QT. yves Le Jeudi, 12 juin 2003, =E0 11:21 America/Montreal, John Rieffel a =E9crit= : > > Hi There, > > I'm writing a Mac OS X Application (in Cocoa) that involves Quicktime > movies, and I'm trying to integrate SndKit, particularly the SndView > stuff (which looks terrifically useful). > > Does anyone out there have experience getting SndKit to deal with > Quicktime Sound files? The movies I'm dealing with all have 16 bit=20 > mono > uncompressed soundtracks... > > Thanks! > jr > > > > ------------------------------------------------------- > This SF.NET email is sponsored by: eBay > Great deals on office technology -- on eBay now! Click here: > http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5 > _______________________________________________ > Musickit-users mailing list > Mus...@li... > https://lists.sourceforge.net/lists/listinfo/musickit-users > |
From: John R. <jri...@cs...> - 2003-06-12 16:19:47
|
Yves, Thanks. Yes, I'm (mostly) familiar with the Quicktime format. I'm very f= amiliar with the Quicktime Developer API. I'm also a big fan of orielly and the macdevcenter. I've used the C-based movie toolbox as well as the (paltry) Cocoa Quicktime tools. But I'm stumped on how to get SndKit to "look" at the quicktime sound data. The only method I've thought of so far is to export the quicktime sound as wav or aiff, then read the saved file via the Snd interface. But, obviously, this is a horrible idea. Granted, I'm still relatively new to all of this, and I'm not suggesting that the process isn't obvious, simply that it hasn't dawned on me yet! ;) jr ------- snip snip ------- > The format is well documented on developer.apple.com > and there is also an article at www.macdevcenter.com > that describes a java parser for QT. >=20 > yves >=20 > Le Jeudi, 12 juin 2003, =E0 11:21 America/Montreal, John Rieffel a =E9c= rit : >=20 > > > > Hi There, > > > > I'm writing a Mac OS X Application (in Cocoa) that involves Quicktime > > movies, and I'm trying to integrate SndKit, particularly the SndView > > stuff (which looks terrifically useful). > > > > Does anyone out there have experience getting SndKit to deal with > > Quicktime Sound files? The movies I'm dealing with all have 16 bit=20 > > mono > > uncompressed soundtracks... > > > > Thanks! > > jr > > > > > > > > ------------------------------------------------------- > > This SF.NET email is sponsored by: eBay > > Great deals on office technology -- on eBay now! Click here: > > http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5 > > _______________________________________________ > > Musickit-users mailing list > > Mus...@li... > > https://lists.sourceforge.net/lists/listinfo/musickit-users > > |
From: Leigh S. <le...@le...> - 2003-06-12 16:55:48
Attachments:
Leigh Smith.vcf
|
> But I'm stumped on how to get SndKit to "look" at the quicktime sound > data. The only method I've thought of so far is to export the > quicktime > sound as wav or aiff, then read the saved file via the Snd interface. > But, obviously, this is a horrible idea. If you can get access to a pointer to sample data that is formatted conventionally in frames, i.e for stereo: sample 0, channel 0; sample 0, channel 1; sample 1, channel 0; sample 1, channel 1; etc You can initialise a SndAudioBuffer with: SndAudioBuffer *qtAudioBuffer = [[SndAudioBuffer alloc] initWithFormat: sndSoundStructHoldingRateChannelsEtc data: dataPointer]; and then the Snd itself: Snd *snd = [[Snd alloc] initWithAudioBuffer: qtAudioBuffer]; At the moment Snd and SndAudioBuffer hold their sample data differently, due to the original requirement to be compatible with SndSoundStructs. This will be unified such that you will probably be able to just initialise a Snd from a memory pointer. SndSoundStruct will be soon modified such that it becomes a struct just holding sample format data named SndFormat probably: typedef struct { int dataFormat; long frameCount; int channelCount; double sampleRate; } SndFormat Getting rid of the unused info, magic and troublesome dataLocation (and the crufty arrangement of data following the struct itself) fields. This will still make it easier to pass around formats of sound data than having to pass each parameter and move entirely to NSData based sample data manipulation. If we then want an higher efficiency VM sample data managing class than NSData provides, we can probably introduce SndSampleData. -- Leigh Smith mailto:le...@le... http://www.leighsmith.com |
From: John R. <jri...@ma...> - 2003-07-01 14:36:36
|
Hi Folks, Last time I checked in I was trying to import Quicktime sound into SndKit. I'm pleased to say that, thanks largely to help from Leigh's and the quicktime-api mailing list, I've had a moderate amount of success. To access the movie sound, I first put the movie intoa typed handle (PutMovieIntoTypedHandle), using the following sound description: outDesc[0]->descSize = sizeof(SoundDescription); outDesc[0]->dataFormat = 'raw'; outDesc[0]->numChannels = 1; outDesc[0]->sampleSize = 8; outDesc[0]->sampleRate = inDesc[0]->sampleRate; and then creating a SndSoundStruct of the following format: mySS.magic = SND_MAGIC; mySS.dataSize = actualSamples; mySS.dataFormat = SND_FORMAT_LINEAR_8; mySS.samplingRate = 8000; mySS.channelCount = 1; and then creating a SndAudioBuffer with the format above, and then creating a Snd via initWithAudioBuffer. There are several points of confusion: - I'm not sure that the apple sound format 'raw' corresponds to SND_FORMAT_LINEAR_8. 'raw' is described in the apple docs (references below) as "k8BitOffsetBinary". As far as I can tell, this is the only 8 bit format. http://developer.apple.com/documentation/QuickTime/APIREF/SOURCESIV/soundformats.htm Obviously I'm must misunderstand _something_, because when I plot the data in a SubSndView, it looks like "stalagtites and stalagmites" as opposed to a waveform. (I have the soundView display mode set to "NX_SOUNDVIEW_WAVE" Does anyone understand the relationship between quicktime sound data formats and SndKit sound data formats? Thanks! jr |
From: Leigh S. <le...@le...> - 2003-06-12 16:17:03
Attachments:
Leigh Smith.vcf
|
Not to put a dampener on SndView, but while it will definitely do the job, it can probably do with a bit of an update, it's probably the oldest code in the SndKit. This should all be behind the scenes, so you should be able to get it working now and have improvements benefit you later. Certainly it works well enough for Spectro. I've ear-marked it to be overhauled as part of an impending SndSoundStruct purge, fixing recording and myriad other improvements that I don't remember. I think we can introduce some better scrolling and viewing behaviour (I have an overridden NSScroller class that implements scaling as well as position). Feel free to compile a wish list for SndView (and/or implement some of these features). This will happen post 2.3 release however :-) Do you want to read QuickTime sound files with the SndKit or do you want to read the QT files using the QuickTime framework and then create a Snd object from a data pointer, pasteboard or other memory operation? I did a QuickTime project using the QT framework and it is devilishly buggy, particularly with retrieving sound tracks. Perhaps QT 6.3 has fixed those problems. Otherwise, libsndfile/sox doesn't handle QT files directly. Other options include subclassing Snd in a similar fashion to SndMP3 to read sound tracks from QT movies using the QT framework. I now have on the fly resampling working. I should be committing that code tonight sometime... -- Leigh Smith mailto:le...@le... http://www.leighsmith.com |