472,331 Members | 1,670 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,331 software developers and data experts.

If stereo WAV file's both channels are identical, change format to mono for all files recursively

hi all,
i found an unanswered question at
http://www.faqts.com/knowledge_base/index.phtml/fid/538
with possible response below. i've tried to send it at
faqt.python but can't figure out how to edit the page. so i put it here.
i want to kwon if this can convert all wave file. is there other
encodage than 8 or 16 bits for .wav files?
any bug and comment are welcome

--
nirinA

#--------------stereo2mono-R.py---------------
'''stereo2mono-R.py
convert stereo to mono recursively
usage : python stereo2mono-R.py path-directory
'''

import os, sys

from stereo2mono import *

directory = sys.argv[1]
os.chdir(directory)

for name in os.listdir('.'):
if name.endswith('.wav'):
w = Stereo2Mono(name)
if w.isStereo() == 1:
print '%s is in stereo'%name
print 'Check for %s samples in the audio frame'%SAMPLING
w.CompareSampling()
print 'Both channels seem to be identical'
print 'Check all data frames and save to mono file'
w.CompareAndSave()
print 'Done'
else:
print '%s is already in mono'%name

else:
pass
#-----stereo2mono.py-----------
'''stereo2mono.py
convert a stereo wave to mono
if both channels are identical

http://www.faqts.com/knowledge_base/.../12121/fid/538
'''

import wave, sys

FORMAT = {'11':'1b','12':'1h','21':'2b','22':'2h'}
# format for wave files encoded in 8 and 16 bits

SAMPLING = 128

class Stereo2Mono:
'''open the wave file and get its parameters
compare the channels
it will be done in two steps.
samples are first compared,
then if the samples are identical
further comparison is performed
and the mono wave file created
'''
def __init__(self, name):
self.name = name
self.w = wave.open(self.name)

def isStereo(self):
if self.w.getnchannels() == 2:
return 1
else:
return 0

def format_in(self):
self.fmt = ''.join((str(self.w.getnchannels()),
str(self.w.getsampwidth())))
return FORMAT.get(self.fmt)

def format_out(self):
self.fmt = ''.join(('1',
str(self.w.getsampwidth())))
return FORMAT.get(self.fmt)

def Parameters(self):
return self.w.getparams()

def Compare(self, amplitude):
if amplitude[0] == amplitude[1]:
return 1
else:
return 0

def CompareSampling(self):
for s in range(0, self.Parameters()[3],SAMPLING):
if self.Compare(wave.struct.unpack(
self.format_in(),self.w.readframes(1))) == 1:
pass
else:
print 'channels at %s are not identical,abort!'%s
#sys.exit()
print 'Samples pass test'

def CompareAndSave(self):
'''Compare all and save to mono'''
self.w.rewind()
self.chars = '/-\\|'
self.Save = wave.open(self.name.split('.')[0]+
'-mono'+'.wav','w')
self.newparams = (1,
self.Parameters()[1],
self.Parameters()[2],
self.Parameters()[3],
self.Parameters()[4],
self.Parameters()[5])

self.Save.setparams(self.newparams)

for i in range(1, self.Parameters()[3]+1):
self.UnPack = wave.struct.unpack(
self.format_in(), self.w.readframes(1))
if self.Compare(self.UnPack) == 1:
self.Save.writeframes(wave.struct.pack(
self.format_out(), self.UnPack[0]))
sys.stdout.write(chr(13))
sys.stdout.write('%s %i/%i ' % (
self.chars[i % 4], i, self.Parameters()[3]))
sys.stdout.flush()
else:
print 'Data at index %s are not the same, abort!'%i
self.w.close()
self.Save.close()

def main():
try:
name = sys.argv[1]

w = Stereo2Mono(name)
if w.isStereo() == 1:
print '%s is in stereo'%name
print 'Check for %s samples in the audio frame'%SAMPLING
w.CompareSampling()
print 'Both channels seem to be identical'
print 'Check all data frames and save to mono file'
w.CompareAndSave()
print 'Done'
else:
print '%s is already in mono'%name

except:
print '''usage : python stereo2mono.py the-stereo-wavefile.wav\n
the wave file must be encoded in 8 or 16 bits'''

if __name__ == '__main__':
main()

# 030718 19:41:48 nirinA

Jul 18 '05 #1
3 7736
Raseliarison nirinA wrote:

hi all,
i found an unanswered question at
http://www.faqts.com/knowledge_base/index.phtml/fid/538
with possible response below. i've tried to send it at
faqt.python but can't figure out how to edit the page. so i put it here.
i want to kwon if this can convert all wave file. is there other
encodage than 8 or 16 bits for .wav files?


Yes, dozens.

As well as 8 and 16 bit integer PCM files, there are also 24
and 32 bit integer PCM, 32 and 64 bit floating point PCM,
A-law, u-law, at least 6 different forms of ADPCM (adaptive
differential PCM), GSM6.10, MP3 and many, many more.

Fortunately other than the ones listed above, all the others
are pretty rare.

Erik
--
+-----------------------------------------------------------+
Erik de Castro Lopo no****@mega-nerd.com (Yes it's valid)
+-----------------------------------------------------------+
J. Headley: "God, root, what is difference ?"
G. Haverland: "God can change the byte order on the CPU, root can't."
Jul 18 '05 #2
klappnase wrote:

Hi,

I think there might be at least 24 bit wav-files, if you have a
soundcard that supports 24 bit, may be even more, for professional use
or so.


Yep, both 24 bit PCM and 32 bit floating point encoded files
are un common use in professional and semi-pro audio recording.

Erik
--
+-----------------------------------------------------------+
Erik de Castro Lopo no****@mega-nerd.com (Yes it's valid)
+-----------------------------------------------------------+
Windows NT : An evolutionary dead end.
Jul 18 '05 #3
Raseliarison nirinA wrote:

hi all,
i found an unanswered question at
http://www.faqts.com/knowledge_base/index.phtml/fid/538
with possible response below. i've tried to send it at
faqt.python but can't figure out how to edit the page. so i put it here.
i want to kwon if this can convert all wave file. is there other
encodage than 8 or 16 bits for .wav files?
any bug and comment are welcome


Just in case you don't know, there is a Python wrapper
to my own libsndfile ( http://www.zip.com.au/~erikd/libsndfile )
being developed here:

http://www.arcsin.org/archive/20030520025359.shtml

libsndfile handles a large number of different file types
(AU, AIFF, WAV and many more) as well as many encodings
(8, 16, 24, and 32 bit integer PCM, 23 and 64 bit float
PCM, A-law, u-law, MS ADPCM, IMA ADPCM, G721, G723 and
so on).

Erik
--
+-----------------------------------------------------------+
Erik de Castro Lopo no****@mega-nerd.com (Yes it's valid)
+-----------------------------------------------------------+
"In civilian equipment, such as computers, the number
of components alone makes miniaturization essential if
the computer is to be housed in a reasonable-sized
building." Electronics Oct. 1, 1957, p. 178
Jul 18 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

13
by: Grace | last post by:
Hi, How do I create/access an INI file in VB .NET? I appreciate any help you can give me... Thanks!
1
by: laredotornado | last post by:
Hi, I'm using PHP 4.4.4 on Apache 2 on Fedora Core 5. PHP was installed using Apache's apxs and the php library was installed to...
9
by: JimmyKoolPantz | last post by:
IDE: Visual Studio 2005 Language: VB.NET Fox Pro Driver Version: 9.0.0.3504 Problem: I currently have a problem altering a DBF file. I do not...
0
by: lovecarole | last post by:
hi, i am the student who should write a program about reading wav file and do the DFT. actually i don't know how to read data of the wav song and...
42
by: Ronin | last post by:
Hello guys, I have a little bit of problem with textfile operations.I would like to some help from you smart people in the forum. I have a...
1
by: homevista | last post by:
Part II: Wave file - How to read to a buffer Wave (or Wav) is the standard format for storing audio data on the PC. As software developers, we are...
6
by: homevista | last post by:
PART III: Putting things together In part I we examined the modem to verify that it supported voice. If so, we took a note about the voice data...
11
by: itdevries | last post by:
Hi, I'm trying to convert some char data I read from a binary file (using ifstream) to a float type. I've managed to convert the int types but now...
0
by: AM | last post by:
-Hello all, I am trying to play stereo wavefiles in python with no success. I can play mono wavefiles, using either pygames mixer library,...
0
by: concettolabs | last post by:
In today's business world, businesses are increasingly turning to PowerApps to develop custom business applications. PowerApps is a powerful tool...
0
by: teenabhardwaj | last post by:
How would one discover a valid source for learning news, comfort, and help for engineering designs? Covering through piles of books takes a lot of...
0
by: Kemmylinns12 | last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
0
by: CD Tom | last post by:
This only shows up in access runtime. When a user select a report from my report menu when they close the report they get a menu I've called Add-ins...
0
jalbright99669
by: jalbright99669 | last post by:
Am having a bit of a time with URL Rewrite. I need to incorporate http to https redirect with a reverse proxy. I have the URL Rewrite rules made...
0
by: antdb | last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine In the overall architecture, a new "hyper-convergence" concept was...
2
by: Matthew3360 | last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
0
by: AndyPSV | last post by:
HOW CAN I CREATE AN AI with an .executable file that would suck all files in the folder and on my computerHOW CAN I CREATE AN AI with an .executable...
0
hi
by: WisdomUfot | last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.