मैं 50% तक ऑडियो की गति को कम करने के प्रयास में पाइथन में तरंग लाइब्रेरी का उपयोग कर रहा हूं। मैं सफल रहा हूं, लेकिन केवल सही चैनल में। बाएं चैनल में यह स्थैतिक का एक पूरा गुच्छा है।मेरा प्रोग्राम 50% तक संगीत की गति को कम करता है लेकिन केवल एक चैनल में
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)
यह क्यों है? चूंकि मैं केवल कच्चे डेटा की प्रतिलिपि बना रहा हूं और पेस्ट कर रहा हूं, इसलिए मैं स्थिर उत्पन्न नहीं कर सकता हूं? संपादित करें: मैं उम्र की तलाश कर रहा हूं और अंत में मुझे लहर प्रारूप के लिए एक उपयोगी संसाधन मिला: http://soundfile.sapp.org/doc/WaveFormat/ यदि मैं स्टीरियो ध्वनि को संरक्षित करना चाहता हूं, तो ऐसा लगता है कि मुझे वास्तविक नमूना चौड़ाई 4 की प्रतिलिपि बनाने की आवश्यकता है। इसका कारण यह है कि दो चैनल हैं और वे 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)`
संपादित करने के बजाय 4 बाइट लेने के 2: ठीक है मुझे पता नहीं कि मुझे क्या दिया यह करने के लिए है, लेकिन मैं पहले से ही स्वतंत्रता यह मुझे दे रहा है आनंद ले रहा हूँ । मैंने wav फ़ाइल को स्मृति में कॉपी करने, प्रतिलिपि को सीधे संपादित करने और इसे आउटपुट फ़ाइल में लिखने का विकल्प चुना है। मैं परिणामों के साथ अविश्वसनीय रूप से खुश हूँ। मैं एक वाव आयात कर सकता हूं, एक बार ऑडियो दोहरा सकता हूं, और इसे केवल 0.2 सेकंड में आउटपुट फ़ाइल में लिख सकता हूं। आधे गुना से गति को कम करने के लिए अब मेरे पुराने कोड के साथ 30 सेकंड सेकेंड के बजाय केवल 9 सेकंड लेते हैं, WAV प्लगइन का उपयोग करते हुए :) यहां कोड है, फिर भी मुझे लगता है कि यह अनुकूलित नहीं है लेकिन यह उससे बेहतर है।
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())
मुझे आश्चर्य है कि कोड कितना छोटा है।
मेरा पहला विचार यह है कि यह फ़ाइल के साथ ही एक मुद्दा है। क्या आपने सही चैनल को म्यूट करने और पूरी गति से बाईं ओर सुनने की कोशिश की है? आप यह जांच सकते हैं कि यह मोनो में आपकी फ़ाइल को फिर से एन्कोड करके और फिर अपने प्रोग्राम के माध्यम से इसे चलाकर प्रोग्राम है या नहीं। क्या आपने अन्य ऑडियो फाइलों का उपयोग करने की कोशिश की है? – NuclearPeon
@NuclearPeon ऑडियो फ़ाइल के साथ कोई समस्या नहीं प्रतीत होता है। मैंने परीक्षण करने के लिए एक यादृच्छिक WAV फ़ाइल डाउनलोड की है और यह वही काम करता है – Wondercricket