我希望能够访问低级像素数据,以使用GAE完成信号处理算法(它消除了BufferedImages和Java.awt.image类的使用) 您可以通过以下方式访问图像数据: ImagesService imagesService = ImagesServiceFactory.getImagesService(); Image oldImage = ImagesServiceFactory.makeImageFromBlob(blobKey); byte[] imageData = oldImage.getImageData(); 所以这是问题所在: 彩色图像有4个波段(aRGB)但是当你得到图像数据时它是一个1D字节的数组。 1)GAE如何将图像数据存储到字节中? (我想它只是把2D数据放到一维数组中,它是灰度的吗?) 2)你如何操纵图像的各个色带和像素?
我的错频率,我不明白为什么我得到错误的值。因为我按照指令计算后跟stackoverflow。 我使用了来自http://introcs.cs.princeton.edu/java/97data/FFT.java.html的 FFT和http://introcs.cs.princeton.edu/java/97data/Complex.java中的复合体。 HTML audioRec.startRecording(); audioRec.read(bufferByte, 0,bufferSize); for(int i=0;i<bufferSize;i++){ bufferDouble[i]=(double)bufferByte[i]; } Complex[] fftArray = new Complex[bufferSize]; for(int i=0;i<bufferSize;i++){ fftArray[i]=new Complex(bufferDouble[i],0); } FFT.fft(fftArray); double[] magnitude=new double[bufferSize]; for(int i=0;i<bufferSize;i++){ magnitude[i] = Math.sqrt((fftArray[i].re()*fftArray[i].re()) + (fftArray[i].im()*fftArray[i].im())); } double max = 0.0; int index = -1; for(int j=0;j<bufferSize;j++){ if(max < magnitude[j]){ max = magnitude[j]; index = j; } } final […]
我想用Java实现快速傅里叶变换以进行和弦识别,但我并不是真的得到它。 它说样本的数量应该是2的幂,那么对于没有等于2的幂的样本数量的歌曲,我们该怎么办呢? 我也想了解STFT。
这就是我现在正在使用的内容: for (int i = 0, numSamples = soundBytes.length / 2; i < numSamples; i += 2) { // Get the samples. int sample1 = ((soundBytes[i] & 0xFF) << 8) | (soundBytes[i + 1] & 0xFF); // Automatically converts to unsigned int 0…65535 int sample2 = ((outputBytes[i] & 0xFF) << 8) | (outputBytes[i + 1] […]
我正在尝试编写一个程序,用于使用Goertzel算法检测频率。 然而,当我将算法应用于我从AudioRecord read()方法获得的数据时,幅度不会在目标频率上达到峰值(.ie:它通常在低频上达到峰值)。 我误会了什么吗? protected void detect() { double[] dbSample = new double[bufferSize]; short[] sample = new short[bufferSize]; max_magnitude = 0; while(isRecording){ int bufferReadResult = recorder.read(sample,0,bufferSize); for (int j=0;j<bufferSize&&j<bufferReadResult;j++) { dbSample[j] = (double)sample[j]; } } int freq=0; while(freq<=20000){ Goertzel g = new Goertzel(RECORDER_SAMPLE_RATE,freq,bufferSize); g.initGoertzel(); for(int i=0;imax_magnitude){ max_magnitude = magnitude; detect_freq = freq; } g.resetGoertzel(); freq+=50; […]
因为世界杯是主要的体育赛事而且Vuvuzelas是世界上最令人讨厌的声音,所以我有一个想法,通过阅读这个新的来明确地删除它们( http://www.popsci.com/diy/article/2010- 06 / simple-software-can-filter-out-vuvuzela-whine )告诉我们声音的频率为233Hz + 466,932,1864Hz。 我已经自己制作了很多Android应用程序,但从未接触过信号分析和过滤部分,所以这里有几个问题,我不是要求精确的答案,而是可能需要链接和教程来找到可以解决的问题。 我猜一款新的Android手机拥有CPU和电源来进行实时过滤。 1)如何拦截来自Jack麦克风的声音 – Line-IN插头 – (我打算用Jack到Jack插头将电视连接到我的手机上)。 我的问题是完全软件和编码,我有所有的电线和适配器插入一个插孔到我的Android手机线路IN。 2)是否有一些傅里叶分析库,我可以查看网络上的Java库并将它们导入我的Android项目吗? 我真的很抱歉,因为我的问题看起来不准确,但我认为那会很棒。 谢谢您的回答。
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+size; i++) { signal_in[i] = (short) ((signal_in[i]) * ( 0.5 * (1-Math.cos( (2 * Math.PI * i) / (size – 1))))) ; } return signal_in; } 我试图用它 pos = (ring+delay*frame_rate*frame_size)%(frame_size*(frame_rate+1)); num = record.read(lin,pos,frame_size); GGSpecSub tempSpecSub = new GGSpecSub(); lin = […]
我有许多以PCM(PCM_SIGNED 8000.0 Hz,16位,单声道,2字节/帧,小端)编码的语音声音流,我想通过网络发送。 为了节省带宽,我目前使用JSpeex对流进行编码。 然而,为了节省更多带宽,我希望(如果可能的话)在使用JSpeex进行编码之前将这些多个流组合成单个流。 我的DSP知识非常缺乏,我想知道如何在Java中组合流?
我正在用Java实现MFCC算法。 在Java中有三角形滤波器和MFCC的示例代码。 这是链接: MFCC Java但是我应该遵循用Matlab编写的代码: MFCC Matlab 我的问题是, 在Matlab代码中它讨论了线性和对数滤波器,但在Java代码中没有任何关于它的内容 。 我应该测量对数和线性滤波器的性能,但是我实现了Java代码并且没有任何相关内容。 另外我不明白Java代码中的这些fbins和cbins是什么?
我知道有很多关于均衡器的问题,但是我没有得到我正在寻找的东西。 我想要做的是一个均衡器,用于修改音频样本,如: equalizer.eqAudio(audiosamples, band, gain) 我不确定这是否是我想要的确切接口,因为我在实现它们方面对DSP知之甚少(我使用filter,限制器,压缩器但没有制造它们)。 所以谷歌搜索我读到我必须对样本进行FFT,这样我得到每个频率范围的数据而不是幅度,按照我想要的方式处理它,然后进行FFT的反转,这样我再次得到音频样本的结果。 我寻找了这个FFT的实现,并找到了JTransform for Java。 该库具有称为离散余弦变换(DCT)的FFT相关算法的实现。 我的问题是: 好吧,我是以正确的方式吗? 由于FFT给出了有关频率的数据,我应该将一大块样本传递给FFT算法。 这个块一定要多大? 是否有一本关于DSP编程的好书可以解释均衡器? 谢谢!