小编Ant*_*son的帖子

我的程序将音乐速度降低了50%,但仅限于一个频道

我在python中使用wave库试图将音频速度降低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)
Run Code Online (Sandbox Code Playgroud)

为什么是这样?既然我只是复制和粘贴原始数据,我肯定无法生成静态?编辑:我一直在寻找年龄,我终于找到了一个有用的波形格式资源:http://soundfile.sapp.org/doc/WaveFormat/ 如果我想保留立体声,看起来我需要复制实际样本宽度为4倍.这是因为有两个通道,它们占用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)`
Run Code Online (Sandbox Code Playgroud)

编辑2:好吧我不知道是什么驱使我这样做但我已经享受它给我的自由了.我选择将wav文件复制到内存中,直接编辑副本,然后将其写入输出文件.我对结果非常满意.我可以导入一个wav,重复一次音频,并将其写入输出文件,仅需0.2秒.使用wav插件,使用我的旧代码将速度降低一半现在只需要9秒而不是30秒以上这里是代码,仍然有点未优化我想但它比它更好.

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 …
Run Code Online (Sandbox Code Playgroud)

python wave

5
推荐指数
1
解决办法
69
查看次数

文件删除而不明确告诉Java删除

违规代码:

    public JWave(String s){
      this.f = new File(s);
      try{
         /**if(!this.f.exists()){
            this.f.createNewFile();
         }*/
         this.datafis = new FileInputStream(f);
         this.datafos = new FileOutputStream(f);
         //datafis.skip(44);
      }catch(IOException e){
         System.out.println(e.toString());
      }
      //generateAttributes();
   }
Run Code Online (Sandbox Code Playgroud)

和测试文件:

public class testFile{
       public static void main(String[] args){
          JWave j = new JWave("harm.wav");
          //System.out.println(j.getAttributes());
          j.close();
       }
    }
Run Code Online (Sandbox Code Playgroud)

还有github repo:https://github.com/Donald-Tho/JWave harm.wav是一个工作的wav文件,之前是600 KB,之后是0 KB.

为了说清楚,当我调用构造函数,然后关闭流后,它会删除文件,即使我没有明确地告诉它.所需的行为是保持文件完好无损.

我在github仓库中有测试文件,wav文件和JWave文件,以便于访问.

java

-2
推荐指数
1
解决办法
57
查看次数

标签 统计

java ×1

python ×1

wave ×1