what is the biggest number that i can send to Wave_write.writeframes(data)

'2+ electriclightheads at gmail.com
Thu Jun 4 05:28:35 EDT 2009


thanx for the example!
somehow on juanty gui comes up but no sound ..
anyway i shortened the script this way and could aplay it

import wave

AMPLITUDE = 2 ** 15

w = wave.open( "out.wav", "w" )
w.setnchannels( 2 )
w.setsampwidth( 2 ) #BYTES
w.setframerate( 22000 )

from array import array
import math

F = 261.626
F2 = F * (2 ** (5 / 12.))
ang = 0.0
ang2 = 0.0
delta = ( math.pi * 2 * F  ) / 22000.0
delta2 = ( math.pi * 2 * F2  ) / 22000.0

for cycle in xrange( 4 ):
    data = array( 'h' )
    for pos in xrange( 22000 ):
        amp = AMPLITUDE * (pos / 22000.0)
        amp2 = AMPLITUDE - amp
        if cycle & 1:
            amp, amp2 = amp2, amp

        data.append( int( ( amp * math.sin( ang ) ) ) )
        data.append( int( ( amp2 * math.sin( ang2 ) ) ) )

        ang += delta
        ang2 += delta2

    w.writeframes( data.tostring() )

w.close()

On Tue, Jun 02, 2009 at 05:13:59PM -0500, Rob Williscroft wrote:
> '2+ wrote in news:mailman.1017.1243932401.8015.python-list at python.org in 
> comp.lang.python:
> 
> > would like to take advantage of the wave module
> > found a good example here:
> > http://www.python-forum.org/pythonforum/viewtopic.php?f=2&t=10644
> > 
> > hmm .. i don't get how to write a stereo .. i mean i can set nchannels
> > .. but how do i actually take control of each ch individually?
> 
> Interleave the channels, one sample for the left then one sample 
> for the right (or maybe its the other way around).
> 
> > and what's the range(in float) of the data i can set in
> 
> The range of a signed 16 bit int, -2**15 to 2**15 - 1.
> 
> > wav_file.writeframes(struct.pack('h', data))?
> 
> Example:
> 
> import wave
> from StringIO import StringIO
> 
> out = StringIO()
> 
> AMPLITUDE = 2 ** 15
> 
> w = wave.open( out, "w" )
> w.setnchannels( 2 )
> w.setsampwidth( 2 ) #BYTES
> w.setframerate( 22000 )
> 
> from array import array
> import math
> 
> F = 261.626
> F2 = F * (2 ** (5 / 12.))
> ang = 0.0
> ang2 = 0.0
> delta = ( math.pi * 2 * F  ) / 22000.0
> delta2 = ( math.pi * 2 * F2  ) / 22000.0
> 
> for cycle in xrange( 4 ):
>   data = array( 'h' )
>   for pos in xrange( 22000 ):
>     amp = AMPLITUDE * (pos / 22000.0)
>     amp2 = AMPLITUDE - amp
>     if cycle & 1:
>       amp, amp2 = amp2, amp
>       
>     data.append( int( ( amp * math.sin( ang ) ) ) )
>     data.append( int( ( amp2 * math.sin( ang2 ) ) ) )
>     
>     ang += delta
>     ang2 += delta2
>   
>   w.writeframes( data.tostring() )
>   
> w.close()
> 
> sample = out.getvalue()
> out.close()
> 
> #a wx player
> 
> import wx
> 
> app = wx.PySimpleApp()
> 
> class Frame( wx.Dialog ):
>   def __init__( self, *args ):
>     wx.Dialog.__init__( self, *args )
>     b = wx.Button( self, -1, "Ok" )
>     b.Bind( wx.EVT_BUTTON, self.button )
>   
>   def button( self, event ):
>     self.sound = wx.SoundFromData( sample ) 
>     self.sound.Play( wx.SOUND_ASYNC )
> 
> frame = Frame( None )
> frame.Show()
> 
> app.MainLoop()
> 
> Rob.
> -- 
> http://www.victim-prime.dsl.pipex.com/
-- 
'2+
http://sarigama.namaste.jp/
is
podcasting his microtuned music
http://www002.upp.so-net.ne.jp/buyobuyo/micro/rss.xml



More information about the Python-list mailing list