我想知道在切割Python数组时逗号的用途是什么 - 我有一个似乎可行的例子,但对我来说看起来很奇怪的一行是
p = 20*numpy.log10(numpy.abs(numpy.fft.rfft(data[:2048, 0])))
Run Code Online (Sandbox Code Playgroud)
现在,我知道在切片数组时,第一个数字是开始,下一个是结束,最后一个是步骤,但结束号后面的逗号是什么?谢谢.
我正在尝试从Python运行一个外部的独立程序.这通常不是问题,但程序是游戏,并且内置了Python解释器.当我使用subprocess.Popen时,它启动单独的程序,但是在原始程序的Python实例下这样做,以便它们共享第一个Python控制台.我可以很好地结束第一个程序,但我宁愿有单独的控制台(主要是因为我有隐藏的控制台启动,但是当我使用subprocess.POpen从Python启动程序时会显示它).
如果我可以完全自己开始第二个程序,我想它就好像我只是"双击它".此外,os.system将无法工作,因为我的目标是跨平台兼容性,而且只能在Windows上使用.
所以我一直在使用FFT,我正在尝试从FFT文件中获取声音波形(最终修改它),然后将修改后的波形输出回文件.我已经获得了声波的FFT,然后在其上使用了逆FFT函数,但输出文件根本听不到.我没有对波形进行任何过滤 - 我只是测试获取频率数据然后将其放回文件中 - 听起来应该是相同的,但听起来差别很大.有任何想法吗?
- 编辑 -
从那以后我一直在研究这个项目,但还没有得到理想的结果.输出的声音文件是嘈杂的(两者都更大声,以及原始文件中不存在的额外噪声),并且来自一个声道的声音泄漏到另一个声道(之前是静音的).输入声音文件是立体声双声道文件,声音仅来自一个声道.这是我的代码:
import scipy
import wave
import struct
import numpy
import pylab
from scipy.io import wavfile
rate, data = wavfile.read('./TriLeftChannel.wav')
filtereddata = numpy.fft.rfft(data, axis=0)
print (data)
filteredwrite = numpy.fft.irfft(filtereddata, axis=0)
print (filteredwrite)
wavfile.write('TestFiltered.wav', rate, filteredwrite)
Run Code Online (Sandbox Code Playgroud)
我不太清楚为什么这不起作用......?
编辑:我已经压缩了问题.py文件和音频文件,如果这可以帮助解决这里的问题.
所以,我正在尝试使用Python Wave模块来获取音频文件,并基本上从中获取所有帧,检查它们,然后将它们写回另一个文件.我试着将我正在读的声音输出到另一个文件中,但它既可以作为噪音,也可以作为声音输出.所以,我很确定我没有分析文件并获得正确的帧......?我正在处理一个立体声16位声音文件.虽然我可以使用更简单的文件来理解该过程,但我最终希望能够接受任何类型的声音文件,因此我需要了解问题所在.
我还注意到Wave模块不会读取32位声音文件 - 它给了我一个"未知格式"的错误.关于那个的任何想法?这是我可以绕过的东西,所以我至少可以读取32位音频文件,即使我只能'渲染'16位文件?
我有点意识到波形文件在左右声道之间是交错的(左声道的第一个样本,右声道的第二个样本等),但是如何分离声道呢?这是我的代码.我剪切输出代码,看看我是否正确读取文件.我正在使用Python 2.7.2:
import scipy
import wave
import struct
import numpy
import pylab
fp = wave.open('./sinewave16.wav', 'rb') # Problem loading certain kinds of wave files in binary?
samplerate = fp.getframerate()
totalsamples = fp.getnframes()
fft_length = 2048 # Guess
num_fft = (totalsamples / fft_length) - 2
temp = numpy.zeros((num_fft, fft_length), float)
leftchannel = numpy.zeros((num_fft, fft_length), float)
rightchannel = numpy.zeros((num_fft, fft_length), float)
for i in range(num_fft):
tempb = fp.readframes(fft_length / fp.getnchannels() / fp.getsampwidth());
#tempb = fp.readframes(fft_length)
up = …Run Code Online (Sandbox Code Playgroud) 编辑:原来这是Eclipse 和枚举/数组初始值设定项的一个长期存在的错误,这真的很不幸。
在 Eclipse 中,我发现我无法访问枚举内部的任何类型的代码完成。这是一个 WIP,当然,我正在使用的代码片段。
enum PlayerState implements State<Player> {
NORMAL(){
@Override
public void enter(Player player){
}
@Override
public void update(Player player){
}
},
JUMP_START(){
Timer jumpTimer = new Timer();
public void enter(Player player){
jumpTimer.set(1);
}
public void update(Player player){
}
},
GLOBAL_STATE(){
@Override
public void update(Player player){
}
};
@Override
public void enter(Player player) {
}
@Override
public void exit(Player player) {
}
@Override
public boolean onMessage(Player player, Telegram telegram) {
return false;
} …Run Code Online (Sandbox Code Playgroud)