android音樂頻譜
❶ 求助==怎麼在android 鎖屏界面實現音樂頻譜圖
Visualizer 類,這個類只在Android 2.3以上的API才支持。
首先實例化Visualizer,參數SessionId可以通過MediaPlayer的對象獲得
[java] view plain
visualizer = new Visualizer(mPlayerInstance.getAudioSessionId());
接著設置需要轉換的音樂內容長度,專業的說這就是采樣,該采樣值一般為2的指數倍,如64,128,256,512,1024。這里我設置了128,原因是長度越長,FFT演算法運行時間更長。
[java] view plain
❷ android 如何做到播放音樂時動態波形
packagecom.AudioFx;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Rect;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.media.audiofx.Equalizer;
importandroid.media.audiofx.Visualizer;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.view.WindowManager;
importandroid.widget.LinearLayout;
importandroid.widget.SeekBar;
importandroid.widget.TextView;
{
privatestaticfinalStringTAG="AudioFxActivity";
_HEIGHT_DIP=160f;
;
privateVisualizermVisualizer;
privateEqualizermEqualizer;
;
;
;
privateTextViewmInfoView;
@Override
publicvoidonCreate(Bundleicicle)
{
super.onCreate(icicle);
mStatusTextView=newTextView(this);
mLinearLayout=newLinearLayout(this);
mLinearLayout.setOrientation(LinearLayout.VERTICAL);
mLinearLayout.addView(mStatusTextView);
setContentView(mLinearLayout);
//CreatetheMediaPlayer
mMediaPlayer=MediaPlayer.create(this,R.raw.my_life);
Log.d(TAG,
"MediaPlayeraudiosessionID:"
+mMediaPlayer.getAudioSessionId());
setupVisualizerFxAndUI();
setupEqualizerFxAndUI();
//
//receivedata,and
//whenitmakessensetoreceivedata.
mVisualizer.setEnabled(true);
//Whenthestreamends,wedon'tneedtocollectanymoredata.We
//don'tdothisin
//,
//non-Visualizerrelatedcode
//inthiscallback.
mMediaPlayer.setOnCompletionListener(newMediaPlayer.OnCompletionListener()
{
publicvoidonCompletion(MediaPlayermediaPlayer)
{
mVisualizer.setEnabled(false);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setVolumeControlStream(AudioManager.STREAM_SYSTEM);
mStatusTextView.setText("音樂播放完畢");
}
});
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mMediaPlayer.start();
mStatusTextView.setText("播放音樂中....");
}
()
{
//CreatetheEqualizerobject(anAudioEffectsubclass)andattachit
//toourmediaplayer,
//withadefaultpriority(0).
mEqualizer=newEqualizer(0,mMediaPlayer.getAudioSessionId());
mEqualizer.setEnabled(true);
TextVieweqTextView=newTextView(this);
eqTextView.setText("均衡器:");
mLinearLayout.addView(eqTextView);
shortbands=mEqualizer.getNumberOfBands();
finalshortminEQLevel=mEqualizer.getBandLevelRange()[0];
finalshortmaxEQLevel=mEqualizer.getBandLevelRange()[1];
for(shorti=0;i<bands;i++)
{
finalshortband=i;
TextViewfreqTextView=newTextView(this);
freqTextView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
freqTextView.setGravity(Gravity.CENTER_HORIZONTAL);
freqTextView.setText((mEqualizer.getCenterFreq(band)/1000)
+"Hz");
mLinearLayout.addView(freqTextView);
LinearLayoutrow=newLinearLayout(this);
row.setOrientation(LinearLayout.HORIZONTAL);
TextViewminDbTextView=newTextView(this);
minDbTextView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
minDbTextView.setText((minEQLevel/100)+"dB");
TextViewmaxDbTextView=newTextView(this);
maxDbTextView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
maxDbTextView.setText((maxEQLevel/100)+"dB");
LinearLayout.LayoutParamslayoutParams=newLinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.weight=1;
SeekBarbar=newSeekBar(this);
bar.setLayoutParams(layoutParams);
bar.setMax(maxEQLevel-minEQLevel);
bar.setProgress(mEqualizer.getBandLevel(band));
bar.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener()
{
publicvoidonProgressChanged(SeekBarseekBar,intprogress,
booleanfromUser)
{
mEqualizer.setBandLevel(band,(short)(progress+minEQLevel));
}
(SeekBarseekBar)
{
}
publicvoidonStopTrackingTouch(SeekBarseekBar)
{
}
});
row.addView(minDbTextView);
row.addView(bar);
row.addView(maxDbTextView);
mLinearLayout.addView(row);
}
}
()
{
mVisualizerView=newVisualizerView(this);
mVisualizerView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
(int)(VISUALIZER_HEIGHT_DIP*getResources()
.getDisplayMetrics().density)));
mLinearLayout.addView(mVisualizerView);
mInfoView=newTextView(this);
StringinfoStr="";
int[]csr=Visualizer.getCaptureSizeRange();
if(csr!=null)
{
StringcsrStr="CaptureSizeRange:";
for(inti=0;i<csr.length;i++)
{
csrStr+=csr[i];
csrStr+="";
}
infoStr+=csrStr;
}
finalintmaxCR=Visualizer.getMaxCaptureRate();
infoStr=infoStr+" MaxCaptureRate:"+maxCR;
mInfoView.setText(infoStr);
mLinearLayout.addView(mInfoView);
mVisualizer=newVisualizer(mMediaPlayer.getAudioSessionId());
mVisualizer.setCaptureSize(256);
mVisualizer.setDataCaptureListener(
newVisualizer.OnDataCaptureListener()
{
(Visualizervisualizer,
byte[]bytes,intsamplingRate)
{
mVisualizerView.updateVisualizer(bytes);
}
publicvoidonFftDataCapture(Visualizervisualizer,
byte[]fft,intsamplingRate)
{
mVisualizerView.updateVisualizer(fft);
}
},maxCR/2,false,true);
}
@Override
protectedvoidonPause()
{
super.onPause();
if(isFinishing()&&mMediaPlayer!=null)
{
mVisualizer.release();
mEqualizer.release();
mMediaPlayer.release();
mMediaPlayer=null;
}
}
/**
*
*{@linkVisualizer.OnDataCaptureListener#onWaveFormDataCapture}
*/
{
privatebyte[]mBytes;
privatefloat[]mPoints;
privateRectmRect=newRect();
privatePaintmForePaint=newPaint();
privateintmSpectrumNum=48;
privatebooleanmFirst=true;
publicVisualizerView(Contextcontext)
{
super(context);
init();
}
privatevoidinit()
{
mBytes=null;
mForePaint.setStrokeWidth(8f);
mForePaint.setAntiAlias(true);
mForePaint.setColor(Color.rgb(0,128,255));
}
publicvoipdateVisualizer(byte[]fft)
{
if(mFirst)
{
mInfoView.setText(mInfoView.getText().toString()+" CaptureSize:"+fft.length);
mFirst=false;
}
byte[]model=newbyte[fft.length/2+1];
model[0]=(byte)Math.abs(fft[0]);
for(inti=2,j=1;j<mSpectrumNum;)
{
model[j]=(byte)Math.hypot(fft[i],fft[i+1]);
i+=2;
j++;
}
mBytes=model;
invalidate();
}
@Override
protectedvoidonDraw(Canvascanvas)
{
super.onDraw(canvas);
if(mBytes==null)
{
return;
}
if(mPoints==null||mPoints.length<mBytes.length*4)
{
mPoints=newfloat[mBytes.length*4];
}
mRect.set(0,0,getWidth(),getHeight());
//繪制波形
//for(inti=0;i<mBytes.length-1;i++){
//mPoints[i*4]=mRect.width()*i/(mBytes.length-1);
//mPoints[i*4+1]=mRect.height()/2
//+((byte)(mBytes[i]+128))*(mRect.height()/2)/128;
//mPoints[i*4+2]=mRect.width()*(i+1)/(mBytes.length-1);
//mPoints[i*4+3]=mRect.height()/2
//+((byte)(mBytes[i+1]+128))*(mRect.height()/2)/128;
//}
//繪制頻譜
finalintbaseX=mRect.width()/mSpectrumNum;
finalintheight=mRect.height();
for(inti=0;i<mSpectrumNum;i++)
{
if(mBytes[i]<0)
{
mBytes[i]=127;
}
finalintxi=baseX*i+baseX/2;
mPoints[i*4]=xi;
mPoints[i*4+1]=height;
mPoints[i*4+2]=xi;
mPoints[i*4+3]=height-mBytes[i];
}
canvas.drawLines(mPoints,mForePaint);
}
}
}
❸ 安卓哪個播放器有頻譜啊,別提天天動聽。頻譜要很精細的那種,像酷狗2010pc版那樣的
一方面是軟體,另一方面,還要硬體支持,硬體質量好才可以。
國產機器,華為和VIVO相對音頻處理效果好一些。
還有,音頻質量也很重要,建議酷狗音樂,QQ音樂,上面高質量音頻資源豐富。
❹ 請問手機上怎麼給視頻添加音頻頻譜
下載一個美冊,裡面的可視化音頻功能可以給視頻添加音頻頻譜,可視化音樂效果非常多,主題非常多,圓形頻譜和波形頻譜都可以調整
❺ 有沒有帶音樂頻譜的播放器軟體,很酷的那種
我就知道一個,天天動聽。手機的音樂播放器,我的手機是諾基亞E70,是翻蓋全鍵盤手機,這款播放器可以將頻譜波動全屏化。很炫哦!
❻ 哪個安卓音樂播放器是帶頻譜的,除了中子!
如果你是想看到頻譜分析圖像的話,可以去找一些鈴聲製作軟體,或者有的機型有一個動態壁紙,也是可以顯示當前頻譜的。
❼ 求推薦安卓帶頻譜音樂播放器
天天動聽有頻譜的,不過要注意的是有的皮膚沒有頻譜,要找帶頻譜的皮膚才行
❽ 有沒有做音樂頻譜視頻的安卓軟體
安卓手機製作音樂頻譜的視頻我感覺美冊可以的,可以嘗試一下,美冊的可視化音頻功能
他的官效果是比較好的,導入音樂後,音頻可以隨著音樂的節奏跳動,直觀好看,讓音樂有立體感✌
❾ android頻譜分析怎麼做
Android 音樂頻譜分析,把時域上連續的信號(波形)強度轉換成離散的頻域信號(頻譜)。
目前該 軟體,沒有安卓版,主要是太復雜了,大型軟體很少有安卓版的。實時頻譜分析儀/音頻可視化功能: - 128個高品質的頻段20Hz到22kHz的] - 對數頻率刻度,以符合人類感知 - 低延遲高響應性 - 的幀率看到平滑的頻率和幅度的動作 - 高性能的本機代碼中使用OpenGL ES 2.0的參考 - FFT窗口大小2048@43/58(用於ARMv7+)幀
❿ 有沒有一款安卓版音樂播放器的頻譜是流線分析。而不是柱形
你可在電腦上下載一個91手機助手,手機和電腦連接的時候打開91手機助手,在上邊搜你要的音樂軟體都有的,呵呵!
給你找到個「影音Flash播放器」 你看看 呵呵