[squeak-dev] The Trunk: Sound-tpr.93.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Jan 3 00:39:10 UTC 2023


tim Rowledge uploaded a new version of Sound to project The Trunk:
http://source.squeak.org/trunk/Sound-tpr.93.mcz

==================== Summary ====================

Name: Sound-tpr.93
Author: tpr
Time: 2 January 2023, 4:38:20.207407 pm
UUID: 5583f070-14de-4807-b445-c125ad072e9d
Ancestors: Sound-eem.92

When writing a sound out to a file we need to divide the 'remaining' value by //2 to make the file size correct - otherwise it gets padded out by a lot of 0s

=============== Diff against Sound-eem.92 ===============

Item was changed:
  ----- Method: AbstractSound>>storeSampleCount:bigEndian:on: (in category 'file i/o') -----
  storeSampleCount: samplesToStore bigEndian: bigEndianFlag on: aBinaryStream
  	"Store my samples on the given stream at the current SoundPlayer sampling rate. If bigFlag is true, then each 16-bit sample is stored most-significant byte first (AIFF files), otherwise it is stored least-significant byte first (WAV files). If self isStereo is true, both channels are stored, creating a stereo file. Otherwise, only the left channel is stored, creating a mono file."
  
  	| bufSize stereoBuffer reverseBytes streamDirect |
  	self reset.
  	bufSize := (2 * self samplingRate rounded) min: samplesToStore.  "two second buffer"
  	stereoBuffer := SoundBuffer newStereoSampleCount: bufSize.
  	streamDirect := aBinaryStream isKindOf: StandardFileStream.
  	reverseBytes := (bigEndianFlag xor: Smalltalk isBigEndian) xor: streamDirect not.
  
  	'Storing audio...'
  		displayProgressFrom: 0 to: samplesToStore during: [:bar | | remaining out |
  			remaining := samplesToStore.
  			[remaining > 0] whileTrue: [
  				bar value: samplesToStore - remaining.
  				stereoBuffer primFill: 0.  "clear the buffer"
  				self playSampleCount: (bufSize min: remaining) into: stereoBuffer startingAt: 1.
  				out := self isStereo
  						ifTrue: [stereoBuffer]
  						ifFalse: [stereoBuffer extractLeftChannel].
  				reverseBytes ifTrue: [out reverseEndianness].
  				streamDirect
  					ifTrue:  "optimization for files: write sound buffer directly to file"
+ 						[aBinaryStream next: (out size // 2 min: remaining// 2) putAll: out startingAt: 1]  "size in words"
- 						[aBinaryStream next: (out size // 2 min: remaining) putAll: out startingAt: 1]  "size in words"
  					ifFalse:  "for non-file streams:"
  						[1 to: (out monoSampleCount min: remaining) do: [:i | aBinaryStream int16: (out at: i)]].
  				remaining := remaining - bufSize]].!



More information about the Squeak-dev mailing list