Ses hızını% 50 azaltmaya çalışmak için python'daki dalga kütüphanesini kullanıyorum. Başarılı oldum, ama sadece doğru kanalda. Sol kanalda bir bütün statiktir.Programım müzik hızını% 50 azaltır, ancak sadece bir kanalda
import wave,os,math
r=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio
compression\Audio compression\aha.wav","r")
w=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio
compression\Audio compression\ahaout.wav","w")
frames=r.readframes(r.getnframes())
newframes=bytearray()
w.setparams(r.getparams())
for i in range(0,len(frames)-1):
newframes.append(frames[i])
newframes.append(frames[i])
w.writeframesraw(newframes)
neden bu? sadece ham verileri kopyalayıp yapıştıracağımdan, statik olarak üretemiyorum düzenleme: Ben çağlar için arıyorum ve sonunda dalga biçimi için yararlı bir kaynak buldum: http://soundfile.sapp.org/doc/WaveFormat/ Eğer stereo ses korumak istiyorsanız, 4 gerçek örnek genişliğini kopyalamak gerekiyor gibi görünüyor iki kez. İki kanal olduğundan bu ve onlar kadar yerine 2.
`import wave
r=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio
compression\Audio compression\aha.wav","r")
w=wave.open(r"C:\Users\A\My Documents\LiClipse Workspace\Audio
compression\Audio compression\ahaout.wav","w")
frames=r.readframes(r.getnframes())
newframes=bytearray()
w.setparams(r.getparams())
w.setframerate(r.getframerate())
print(r.getsampwidth())
for i in range(0,len(frames)-4,4):
newframes.append(frames[i])
newframes.append(frames[i+1])
newframes.append(frames[i+2])
newframes.append(frames[i+3])
newframes.append(frames[i])
newframes.append(frames[i+1])
newframes.append(frames[i+2])
newframes.append(frames[i+3])
w.writeframesraw(newframes)`
Düzenleme 4 bayt almak 2: Tamam ben beni bunu yapmaya sürdü hiçbir fikrim yok ama zaten bu beni veriyor özgürlükleri zevk alıyorum . Wav dosyasını belleğe kopyalamayı, kopyayı doğrudan düzenlemeyi ve bir çıktı dosyasına yazmayı seçtim. Sonuçlarla inanılmaz derecede mutluyum. Bir dalgayı içe aktarabilirim, sesi bir kez tekrarlayıp, bir çıktı dosyasına yazabilirim, sadece 0,2 saniyede. Bu hızın yarı yarıya azaltılması, eski kodumun wav eklentisini kullanarak sadece 30 saniye yerine sadece 30 saniye sürüyor :) işte bu kod, hala optimize edilmemiş bir şeydi ama ne olduğundan daha iyi.
import struct
import time as t
t.clock()
r=open(r"C:/Users/apier/Documents/LiClipse Workspace/audio editing
software/main/aha.wav","rb")
w=open(r"C:/Users/apier/Documents/LiClipse Workspace/audio editing
software/main/output.wav","wb")
rbuff=bytearray(r.read())
def replacebytes(array,bites,stop):
length=len(bites)
start=stop-length
for i in range(start,stop):
array[i]=bites[i-start]
def write(audio):
w.write(audio)
def repeat(audio,repeats):
if(repeats==1):
return(audio)
if(repeats==0):
return(audio[:44])
replacebytes(audio, struct.pack('<I', struct.unpack('<I',audio[40:44])
[0]*repeats), 44)
return(audio+(audio[44:len(audio)-58]*(repeats-1)))
def slowhalf(audio):
buff=bytearray()
replacebytes(audio, struct.pack('<I', struct.unpack('<I',audio[40:44])
[0]*2), 44)
for i in range(44,len(audio)-62,4):
buff.append(audio[i])
buff.append(audio[i+1])
buff.append(audio[i+2])
buff.append(audio[i+3])
buff.append(audio[i])
buff.append(audio[i+1])
buff.append(audio[i+2])
buff.append(audio[i+3])
return(audio[:44]+buff)
rbuff=slowhalf(rbuff)
write(rbuff)
print(t.clock())
Kodun ne kadar küçük olduğuna şaşırdım.
İlk düşüncem bu dosyanın kendisi ile ilgili bir sorun olmasıdır. Doğru kanalı susturmayı ve sadece solda tam hızda dinlemeyi denediniz mi? Dosyanızı yeniden kodlayarak ve programınızı tekrar çalıştırarak programın olup olmadığını kontrol edebilirsiniz. Diğer ses dosyalarını kullanmayı denediniz mi? – NuclearPeon
@NuclearPeon Ses dosyasıyla ilgili bir sorun görünmüyor. Ben test etmek için bir rasgele wav dosyası indirilen ve aynı şey – Wondercricket