導航:首頁 > 操作系統 > android正弦波

android正弦波

發布時間:2022-12-16 08:23:02

A. 安卓版eq音樂播放器2.4.9均衡器怎麼調

專業音樂播放器均衡器設置均衡器還可以用來根據用家聽音口味做適當優化,比如:適當提升7khz和10khz可以突出細節並且讓人聲變甜。
而對14khz和20khz的提升則可能造成聲音變得具有華麗感和金屬味,但也容易變噪變得數碼味較濃,建議20khz的滑塊不要給增益,而14khz的滑塊可以輕微增益。
5khz的適當增益能提升人聲清晰度。將1.8khz和2.5khz適當壓低能起到一定柔化和凈化的作用,適當提升則能起到銳化的作用,但是這兩個滑塊不要大起大落,2個dB 的幅度已經算是很大膽了。220hz和311hz這兩個滑塊輕微提升能顯得較為溫暖。
具體的調節,需要用家自己根據實際環境和器材情況進行調節,這同樣是很有意義的。

樂器的調節范圍:
●弦樂器:明亮度調節6KHz和12KHz,豐滿度170Hz和310Hz,撥弦聲1KHz和1KHz
●鋼琴:低音60Hz和170Hz,臨場感3K和6K,衰減12KHz 14KHz 16KHz聲音單薄反之實在。
●低音鼓:敲擊聲3K,低音60Hz。
●小鼓/高音鼓/手鼓:飽滿度170Hz和310Hz清脆度/臨場感6K
●鈸:尖銳感6K和12K。
●手風琴/風琴:飽滿度310Hz、臨場感6K
●BASS:撥弦聲1K ,低音效果60Hz,撥弦雜訊(擦弦聲)3K
●電吉它:豐滿度170Hz和310Hz,明亮度3K
●木吉它:琴身聲310Hz,清晰度/宏亮度3K和6K,衰減12KHz 14KHz 16KHz聲音單薄反之實在。
●小號:豐滿度170Hz和310Hz,清脆感6K

一些音樂的調節方法:
1、在放管弦樂或交響樂時,可把60Hz、170Hz提升一半,310Hz、600Hz提升四分之一1K可不提升或少許衰減 ,3K和6K適當提升,12K、14K、16K可把16K提升到最大,它們三個可成一個30來度的坡。
2、在放獨唱或合唱時可把170Hz和1KHz稍提升,3K和6K稍衰減。

頻率 說明
<80Hz 80Hz以下主要是重放音樂中以低頻為主的打擊樂器,例如大鼓、定音鼓,還有鋼琴、大提琴、大號等少數存在極低頻率的樂器,這一部分如果有則好,沒有對音樂欣賞的影響也不是很大。這一部分要重放好是不容易的,對器材的要求也較高。許多高級的器材,為了表現好80(或80左右)Hz以上的頻段的音樂,寧願將80(或80左右)Hz以下的頻率乾脆切除掉,以免重放不好,反而影響主要頻段的效果。
極低頻20Hz為人耳聽覺下限,可測試您的器材低頻重放下限,低頻中的25Hz、31.5Hz、Hz、40Hz、50Hz和63Hz是許多音箱的重放下限,如果您的音箱在這些頻率中某處聲音急劇下降,則表明這個頻率就是您的音箱低頻重放下限。
80-160Hz 在80-160Hz頻段的聲音主要表現音樂的厚實感,音響在這部分重放效果好的話,會感到音樂厚實、有底氣。這部分表現得好的話,在80Hz以下缺乏時,甚至不會感到缺乏低音。如果表現不好,音樂會有沉悶感,甚至是有氣無力。是許多低音炮音箱的重放上限,具此可判斷您的低音炮音箱頻率上限。
300-500Hz 在300-500Hz頻段的聲音主要是表現人聲的(唱歌、朗誦),這個頻段上可以表現人聲的厚度和力度,好則人聲明亮、清晰,否則單薄、混濁。
800Hz 800Hz這段一般設備都容易播好,但是要注意不要過多。這段要是過多的話會感到音響的頻響變窄,高音缺乏層次,低頻豐滿度不夠。
1000Hz 1kHz是音響器材測試的標准參考頻率,通常在音響器材中給出的參數是在1kHz下測試。
1200Hz 1.2kHz可以適當多一點,但是不宜超過3dB,可以提高聲音的明亮度,但是,過多會是聲音發硬。
2000-4000Hz 2~4kHz對聲音的亮度影響很大,這段聲音一般不宜衰減。這段對音樂的層次影響較大,有適當的提升可以提高聲音的明亮度和清晰度,但是在4kHz時不能有過多的突出,否則女聲的齒音會過重。
8000-12000Hz 8~12kHz是音樂的高音區,對音響的高頻表現感覺最為敏感。適當突出(5dB以下)對音響的的層次和色彩有較大幫助,也會讓人感到高音豐富。但是,太多的話會增加背景雜訊,例如:系統(音效卡、音源)的雜訊會被明顯地表現出來,同時也會讓人感到聲音發尖、發毛。如果這段缺乏的話,聲音將缺乏感染力和活力。
14000Hz 14kHz以上為音樂的泛音區,如果缺乏,聲音將缺乏感染力和高貴感,例如小提琴將沒有「松香味」。這一部分也不宜過多,基本平直或稍有衰減(不超過-3dB)即可。 20000Hz 20kHz為人耳聽覺上限,可測試您的器材高頻重放上限。
16kHz-20kHz可能在一些器材中消失,此時有可能是您的器材無法重放此段頻率,如果您是年紀較大者,也有可能是您的聽覺衰減所至。
正弦波掃頻信號
20Hz-20kHz正弦波掃頻信號是從20Hz到20kHz頻率自動平滑改變播放,通過播放此段測試信息可快速判斷何處頻率存在問題

均衡器的調節可分為以下主要幾段進行:
20Hz--60Hz部分 這段低頻往往給人很響的感覺,如雷聲,是音樂中強勁有力的感覺。 如果提升過高,則又會混濁不清,造成清晰度不佳。
60Hz--250Hz部分 這段頻率包括基音、節奏音的主音,它和高中音的比例構成了音色結構的平衡特性; 強之則音色豐滿,弱之則音色單薄,過強則產生隆隆聲。
250Hz--2KHz部分 它包括大多數樂器的低頻泛音和低次諧波。
2KHz--4kHz部分 這段頻率屬中頻,如果提升得過高會掩蓋說話的識別音,尤其是3kHz提升過高,會引起聽覺疲勞。
4kHz--5KHz部分 這是具有臨場感的頻段,它影響語言和樂器等聲音的清晰度。提升這一頻段,使人感覺聲源與聽者的距離顯得稍近了一些;衰減5kHz,就會使聲音的距離感變遠;如果在5kHz左右提出升6dB,則會使整個混合聲音的聲功率提升3dB。
6kHz--16kHz部分 這一頻段控制著音色的明亮度,宏亮度和清晰度。

各個頻段的音色與音感
音色,是一種描述樂器發音品質的術語,由於每種樂器都有自己的頻譜分布特徵,因而同一種樂器的發音在不同的音區內,起音感雖然不一定一致,但其音色大體一致。 表述音色特徵的術語一般都與樂器的關系密切。
音色術語一般要比音感豐富一些,其間的關聯有以下幾種情形:
沉悶:悶這種音感是同20赫茲左右的頻率賦予的,而高於80赫茲時,音感就會偏厚,因此具有沉悶感的音響一般基頻很低,而且很少有豐富的泛音成分,具有此音感特徵的樂器音源一般都是低音樂器的低音區。
沉重:單純從音感方面來看,沉重感是80赫茲頻點處所特有的音感效果,而從音型特徵上來看,短促的低音打擊音型樂器具有更強烈的重感效果。
低沉:低沉常用於形容比沉悶稍豐厚的音響,他的基頻可能與沉悶的音響一樣,但其高次諧波大多都比沉悶的音響豐富一些。
深沉:這是一種帶有感情味的形容詞,常用於表述具有色彩性的「松盪」的低頻響應,其基頻比低沉的音響稍高一些。一般具有深沉感的樂器,最典型的就是大提琴和簫的低音區。
渾厚:這種音感是頻譜較寬的音源所具有的特徵,所以渾厚的音感一般都是形容基頻較低,頻譜較寬的音源。
淳厚:淳厚是指具有較高融合性的低頻音響,具有淳厚感的典型音源,是鋼片琴的低音區。
豐滿:這是頻率在100~250赫茲之間的音源所具有的音感特徵,一般發音在此頻段內的音源,都必然會有豐富的音感效果。
寬厚:豐滿的音源如果頻譜更寬一些,就會產生寬厚的音感效果。
飽滿:這是一種叫強勁度的低頻音響,,一般加置有「渦輪失真」效果的電貝司,此音感特徵非常明顯。
明亮:一般當樂音的基頻高於500赫茲以上時,就會變的明快起來,甚至高到7500赫茲處時,我們也不能說它不明亮,所以音源的明亮感是一種比較通泛的形容詞。明亮感在2800赫茲頻點處最為明顯。
響亮:常用於形容帶頸度的高明度音響,並且當頻譜高出4000赫茲以上時,音源就不具有此音感特徵了。
宏亮:直待有一定融合性的高明亮音響。
圓潤:指比較柔和的高明亮度音響。
柔和:與圓潤相比,柔和感更偏於暗悶,是一種相對低明亮度的音響。
清脆:頻譜集中在4000~8000赫茲之間的音響一般都具有一定的清脆感效果。
高亢:指高穿透力的清脆音響,有此音感特徵的典型樂器就是嗩吶。
尖銳:頻譜集中在6800赫茲左右的音響一般都尖銳刺耳的。
尖厲:尖銳的音響如果還帶有類似失真的嘈雜感,即可產生尖厲的音感效果。
纖細:頻譜在8000赫茲以上的音樂,一般都具有纖細的音感效果。
融合:一般不易突出的柔和音響,都具有一定的融合感。當然,所有的音源都可以用融合或或不融合的程度衡量。在樂器中,一般認為中提琴、大提琴的融合感最好。
干澀:這是融合感的反義詞,一般和諧泛音缺乏、不和諧泛音突出的高頻段音響,都具有某種程度的干澀,在樂器 當中,他主要是由於極高音區缺乏共鳴所造成的。
堅實:600赫茲左右的窄頻帶音響,以及發音短促的音型,都具有某種檢視的音感效果。
空洞:指帶有「染色」效果的暗悶音響,此音感特徵常常常常被人們用於形容大木魚的音色。
溫暖:這是一種形容樂音色彩性的詞,他一般與音響的「染色度」成正比,如:排鍾,就具有次種音感。
粗獷:低頻音響如果帶有類似過載失真的效果,即可形成粗獷的音感。
粗糙:粗糙感是一種略帶沙音的粗獷音響,一般小號、圓號在吹奏低音區時,都有此音感特徵。
沙啞:特製帶有明顯「氣流沙音」的虛浮聲響效果。
蒼勁:這是一種帶有感情味的形容詞,一般是指較低頻段內的沙啞音響,如大管的低音區等。
緊張:這是樂音內含有某些特別的不和諧泛音成分的結果。
力度感:力度感在低頻段特指200~500盒子頻段內的音響,如:大鼓、大胡的低音區,力度感就較好。在中、高頻段,力度感是指高穿透力、高突出性的不柔和音響,一般高音銅管樂器的中、高音區,都具有良好的力度感效果。
穿透力:指高突出性、高明亮度的音響,穿透力在4500赫茲附近較為明顯。
光彩性:指有一定突出感的高圓潤度音響。
悲涼:悲涼與溫暖互為反義,它也是一種帶感情味的次。具有此音感特徵的典型樂器音源,就是中音雙簧管的中音區。
陰森:高緊張度的低頻段音響,即可形成陰森的音感效果。
發扁:這是2500赫茲處所特有的音響效果。在此頻點附近的音樂,一般都明顯有「發扁」的感覺。如:板胡、二胡等,次種音感特徵十分明顯。
發暗:如果樂音中缺乏6000赫茲以上的頻譜成分,一般都可以使起發音變「暗」。
發虛:這是樂器在發較高音階時,雜音增多所引起的,這種雜音通常類似於氣流沙聲。
極高頻: 16K-20K 色彩 提升有神秘感; 12K-16K 高頻泛音,光彩; 10K-12K 高頻泛音,光澤;
高頻和高頻低段: 8K-10K S音; 6K-8K 明亮度、透明度, 提升齒音重、降落 聲音黯淡; 5K-6K 語言的清晰度,提升聲音鋒利、易疲勞;
中頻上段: 4K-5K 樂器表面響度,提升樂器距離近、降落樂器距離遠; 4K 穿透力,提升 咳音; 2K-3K 對明亮度最敏感,提升聲音硬,不自然
中頻: 1K-2K 通透感、順暢感,提升有跳躍感、降落 鬆散; 800 力度,提升喉音重; 500-1K 人聲基音、聲音輪廓,提升語音前凸、降落語音收縮感; 300-500 語音主要音區,提升語音單調、降落語音空洞;
中頻低段: 150-300 聲音力度、男聲力度,提升聲音硬、無特色,降落:軟、飄;
低頻: 100-150 豐滿度,提升渾濁、降落單薄; 60-100 渾厚感,提升轟鳴(轟)、降落無力; 20-60 空間感,提升低頻共振(嗡)、降落空虛; 低頻上段80-160;中低頻40-80;低頻下段20-40;超低頻32-~。

各頻段聲音的作用
人耳對聲音頻率的感覺是從最低的20Hz到最高的20KHz,而人的語音頻率范圍則集中在80Hz~12kHz之間,不同頻段的聲音對人的感受是不同的。
1. 20Hz--60Hz部分 這一段提升能給音樂強有力的感覺,給人很響的感覺,如雷聲。如果提升過高,則又會混濁不清,造成清晰度不佳,特別是低頻響應差和低頻過重的音響設備。
2. 60Hz--250Hz部分 這段是音樂的低頻結構,它們包含了節奏部分的基礎音,包括基音、節奏音的主音。它和高中音的比例構成了音色結構的平衡特性。提升這一段可使聲音豐滿,過度提升會發出隆隆聲,衰減此頻段和高中音段會使聲音單薄。
3. 250Hz--4KHz部分 這段包含了大多數樂器的低頻諧波,同時影響人聲和樂器等聲音的清晰度,調整時要配合前面低音的設置,否則音質會變的很沉悶。如果提升過多會使聲音像電話里的聲音;如把600Hz和1kHz過度提升會使聲音像喇叭的聲音;如把3KHz提升過多會掩蔽說話的識別音,即口齒不清,並使唇音「m、b、v」難以分辨;如把1kHz和3kHz過分提升會使聲音具有金屬感。由於人耳對這一頻段比較敏感,通常不調節這一段,過分提升這一段會使聽覺疲勞。
4. 4kHz--5KHz部分 這是影響臨場感(距離感)的頻段。提升這一頻段,使人感覺聲源與聽 者的距離顯得稍近了一些;衰減則就會使聲音的距離感變遠;如果在5KHz左右提升6dB,則會使整個混合聲音的聲功率提升3dB。
5. 6kHz--16kHz部分 這一頻段控制著音色的明亮度,宏亮度和清晰度。一般來說提升這部分使聲音宏亮,但不清晰,還可能會引起齒音過重;衰減這部分使聲音變得清晰,可音質又略顯單薄。該頻段適合還原人聲。

下邊列出幾種常見EQ組合的特點。
●POP:流行樂,它要求兼顧人聲和器樂,組合比較平均,所以EQ曲線的波動不是很大。
●ROCK:搖滾樂,它的高低兩端提升很大,低音讓音樂強勁有力,節奏感很強,高音部分清晰甚至刺耳。
●JAZZ:爵士樂,和POP相比,它提升了3-5KHz部分,增強臨場感。
●Classical:古典樂,它提升的也是高低兩部分,主要突出樂器的表現。
●Vocal:人聲,人的嗓子發出的聲音的頻率范圍比較窄,主要集中在中頻部分。

此外需要說明的是:每個人對不同頻率的聲音感覺是不一樣的,音響回放設備的頻率響應也不同,人的聽門曲線也只是根據統計數據畫出,所以別人聽起來很自然的聲音自己可能會覺得不舒服,均衡器的調節需要根據自己的聽感特點和所使用的播放設備進行個性化的調整。

B. android音頻底層調試-基於tinyalsa

因為Android中默認並沒有使用標准alsa,而是使用的是tinyalsa。所以就算基於命令行的測試也要使用libtinyalsa。Android系統在上層Audio千變萬化的時候,能夠能這些個工具實時查看到,比方音頻通道的切換等等。

編譯完後會產生tinyplay、tinymix、tinycap等工具。

tinymix用法:

相應解釋:

Playback Path:

例:將輸出切換到揚聲器

關於tinymix小結:

通過觀察發現,Android系統的聲音音量的調節並沒有直接使用tinyalsa,而基於上層軟體實現。由於不管上層音量怎麼改變,這里看到的都是24(以我使用的設備為例)。

通道的切換是真正使用了tinyalsa,當通過不同通道播放音樂的時候能夠實時觀察到通道的切換。在某個站點上看到Android在沒有聲音播放的3秒後會關閉alsa,這里也得到了證實,我曾經覺得Android系統會永久佔用音頻設備。

當通過藍牙播放音樂的時候,已經不經過alsa了,tinymix查看到都處理關閉狀態。由於Android4.2的藍牙協議所有在用戶層實現了,直接走uart通道。

一般播放1khz 0db正弦波,然後在codec輸出端示波器簡單測量是否失真,雜音,然後再使用音頻分析儀測試指標。

tinyalsa源碼
原文: https://www.cnblogs.com/yxwkf/p/5344068.html

C. 從真實的示波器中輸出一個正弦信號,怎麼在android模擬的信號示波器上顯示

示波器是接收設備,怎麼會輸出正弦信號?
是 示波器檢測到的信號吧,可以先存成數據格式,再導到電腦或手機上。

D. 正弦波的g.729話音包是否有規律

沒有。
g729編碼,每次只能編碼160個位元組,編碼後為10個位元組大小,16:1的壓縮比,如果要編碼320位元組的數據,需要分兩次進行,並且G729A不支持多路同時解碼,否則聲音會有問題,G729b也不行,ITU上的代碼都不支持多路解碼, 但是g729b裡面增加了靜音檢測,即在不說話的時候,可以自動發一些噪音流。

如果作為終端來說,單路基本夠用,這個我在ios和android、windows下都測試通過,源碼都可以編譯,但是作為伺服器來說,可能多路就是必須的了,因為會用到一些會議等操作。

g723.1帶寬5.3k或6.3kbit/s,g729是8kbit/s,比g729略低,但是噪音要比g729大一些,並且演算法延遲是g729的2倍多 g711帶寬64kbit,但是演算法延遲為0。因為G711來說比較簡單,在有線環境下使用也沒什麼大問題, 但是在小帶寬下G729是不錯的選擇。

E. 移動端短語音消息音頻格式選擇

1. 移動端原生音頻支持

1.1 android Supported media formats

https://developer.android.com/guide/topics/media/media-formats

Format / File Type(s) / Container Formats

AAC LC••Support for mono/stereo/5.0/5.1 content with standard sampling rates from 8 to 48 kHz.• 3GPP (.3gp)

• MPEG-4 (.mp4, .m4a)

• ADTS raw AAC (.aac, decode in Android 3.1+, encode in Android 4.0+, ADIF not supported)

• MPEG-TS (.ts, not seekable, Android 3.0+)

HE-AACv1 (AAC+)•

(Android 4.1+)



HE-AACv2 (enhanced AAC+)•Support for stereo/5.0/5.1 content with standard sampling rates from 8 to 48 kHz.

AAC ELD (enhanced low delay AAC)•

(Android 4.1+)



(Android 4.1+)

Support for mono/stereo content with standard sampling rates from 16 to 48 kHz

AMR-NB••4.75 to 12.2 kbps sampled @ 8kHz3GPP (.3gp)

AMR-WB••9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz3GPP (.3gp)

FLAC•

(Android 4.1+)



(Android 3.1+)

Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1 kHz is recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler does not include a low-pass filter). 16-bit recommended; no dither applied for 24-bit.FLAC (.flac) only

MIDI•MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody• Type 0 and 1 (.mid, .xmf, .mxmf)

• RTTTL/RTX (.rtttl, .rtx)

• OTA (.ota)

• iMelody (.imy)

MP3•Mono/Stereo 8-320Kbps constant (CBR) or variable bit-rate (VBR)MP3 (.mp3)

Opus•

(Android 5.0+)

Matroska (.mkv)

PCM/WAVE•

(Android 4.1+)

•8- and 16-bit linear PCM (rates up to limit of hardware). Sampling rates for raw PCM recordings at 8000, 16000 and 44100 Hz.WAVE (.wav)

Vorbis•• Ogg (.ogg)

• Matroska (.mkv, Android 4.0+)

1.2 Supported Audio File and Data Formats in OS X

https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html

Allowable data formats for each file format.

File FormatData Formats

AAC (.aac, .adts)'aac '

AC3 (.ac3)'ac-3'

AIFC (.aif, .aiff,.aifc)BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw', 'alaw', 'MAC3', 'MAC6', 'ima4' , 'QDMC', 'QDM2', 'Qclp', 'agsm'

AIFF (.aiff)BEI8, BEI16, BEI24, BEI32

Apple Core Audio Format (.caf)'.mp3', 'MAC3', 'MAC6', 'QDM2', 'QDMC', 'Qclp', 'Qclq', 'aac ', 'agsm', 'alac', 'alaw', 'drms', 'dvi ', 'ima4', 'lpc ', BEI8, BEI16, BEI24,BEI32, BEF32, BEF64, LEI16, LEI24, LEI32, LEF32, LEF64, 'ms\x00\x02', 'ms\x00\x11', 'ms\x001', 'ms\x00U', 'ms \x00', 'samr', 'ulaw'

MPEG Layer 3 (.mp3)'.mp3'

MPEG 4 Audio (.mp4)'aac '

MPEG 4 Audio (.m4a)'aac ', alac'

NeXT/Sun Audio (.snd, .au)BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw'

Sound Designer II (.sd2)BEI8, BEI16, BEI24, BEI32

WAVE (.wav)LEUI8, LEI16, LEI24, LEI32, LEF32, LEF64, 'ulaw', 'alaw'

Core Audio includes a number of audio codecs that translate audio data to and from Linear PCM. Codecs for the following audio data type are available in OS X v10.4. Audio applications may install additional encoders and decoders.

Audio data typeEncode from linear PCM?Decode to linear PCM?

MPEG Layer 3 ('.mp3')NoYes

MACE 3:1 ('MAC3')YesYes

MACE 6:1 ('MAC6')YesYes

QDesign Music 2 ('QDM2')YesYes

QDesign ('QDMC')NoYes

Qualcomm PureVoice ('Qclp')YesYes

Qualcomm QCELP ('qclq')NoYes

AAC ('aac ')YesYes

Apple Lossless ('alac')YesYes

Apple GSM 10:1 ('agsm')NoYes

ALaw 2:1 'alaw')YesYes

Apple DRM Audio Decoder ('drms')NoYes

AC-3NoNo

DVI 4:1 ('dvi ')NoYes

Apple IMA 4:1 ('ima4')YesYes

LPC 23:1 ('lpc ')NoYes

Microsoft ADPCMNoYes

DVI ADPCMYesYes

GSM610NoYes

AMR Narrowband ('samr')YesYes

µLaw 2:1 ('ulaw')YesYes

1.3 總結:

android/ios都可以對mp3解碼,但不能編碼,編碼依賴lame;

android/ios支持對aac進行編解碼;

mp3,aac均是音樂編碼器,android支持對amr窄帶與寬頻編解碼,ios文檔顯示對窄帶支持編解碼,但有人說ios4.3.x版本之後不再支持AMR,剔除了AMR的硬解,如需使用依賴libopencore庫;

結論:

h5 audio標簽對mp3支持最好(audio標簽除了firefox與opera都支持mp3,ogg,wav;flash播放器可以支持到mp3,aac,speex,nellymoser),考慮對純web的兼容性,使用mp3;

android,ios硬體對aac支持最好,考慮硬編碼的性能與效率,使用aac;

amr是語音編碼器,考慮使用場景,推薦amr.

對比微信,微信短語音,6.0之前用的amr,6.0之後用的silk_v3.

2.音頻基礎概念

2.1聲音三要素

聲音的特性可由三個要素來描述,即響度、音調和音色。

響度:人耳對聲音強弱的主觀感覺稱為響度。響度和聲波振動的幅度有關。一般說來,聲波振動幅度越大則響度也越大。當我們用較大的力量敲鼓時,鼓膜振動的幅度大,發出的聲音響;輕輕敲鼓時,鼓膜振動的幅度小,發出的聲音弱。音叉振動時發出的聲波為單音,即只有一個頻率成分。若設法將音叉的振動規律記錄下來,可發現其振動波形為一正弦波。當用不同力量敲擊某個音叉時,音叉發出的聲波幅度不同,這意味著聲音的響度不同。給出了兩個聲音波形,其幅度一大一小,幅度大的波形其聲音響度大,幅度小的波形其聲音響度小。另外,人們對響度的感覺還和聲波的頻率有關,同樣強度的聲波,如果其頻率不同,人耳感覺到的響度也不同。

音調:人耳對聲音高低的感覺稱為音調。音調主要與聲波的頻率有關。聲波的頻率高,則音調也高。當我們分別敲擊一個小鼓和一個大鼓時,會感覺它們所發出的聲音不同。小鼓被敲擊後振動頻率快,發出的聲音比較清脆,即音調較高;而大鼓被敲擊後振動頻率較慢,發出的聲音比較低沉,即音調較低。如果分別敲擊一個小音叉和一個大音叉時,同樣會感覺到小音叉所發聲音的音調較高,大音叉所發聲音音調較低。如果設法把大、小音叉所發出的聲波記錄下來,可發現小音叉在單位時間內振動的次數多,即頻率高,大音叉在單位時間內振動的次數少,即頻率低。給出了兩個頻率不同的聲音波形,從聲音可聽出,頻率高的聲音波形聽起來音調較高,而頻率低的聲音波形聽起來則音調較低。

音色:音色是人們區別具有同樣響度、同樣音調的兩個聲音之所以不同的特性,或者說是人耳對各種頻率、各種強度的聲波的綜合反應。音色與聲波的振動波形有關,或者說與聲音的頻譜結構有關。前面說過,音叉可產生一個單一頻率的聲波,其波形為正弦波。但實際上人們在自然界中聽到的絕大部分聲音都具有非常復雜的波形,這些波形由基波和多種諧波構成。諧波的多少和強弱構成了不同的音色。各種發聲物體在發出同一音調聲音時,其基波成分相同。但由於諧波的多少不同,並且各次諧波的幅度各異,因而產生了不同的音色。例如當我們聽胡琴和揚琴等樂器同奏一個曲子時,雖然它們的音調相同,但我們卻能把不同樂器的聲音區別開來。這是因為,各種樂器的發音材料和結構不同,它們發出同一個音調的聲音時,雖然基波相同,但諧波構成不同,因此產生的波形不同,從而造成音色不同。給出了小提琴和鋼琴的波形和聲音,這兩個聲音的響度和音調都是相同的,但聽起來卻不一樣,這就是因為這兩個聲音的音色不同(波形不同)。

2.2采樣率和采樣大小

聲音其實是一種能量波,因此也有頻率和振幅的特徵,頻率對應於時間軸線,振幅對應於電平軸線。波是無限光滑的,弦線可以看成由無數點組成,由於存儲空間是相對有限的,數字編碼過程中,必須對弦線的點進行采樣。采樣的過程就是抽取某點的頻率值,很顯然,在一秒中內抽取的點越多,獲取得頻率信息更豐富,**為了復原波形,一次振動中,必須有2個點的采樣**,人耳能夠感覺到的最高頻率為20kHz,因此要滿足人耳的聽覺要求,則需要至少每秒進行40k次采樣,用40kHz表達,這個40kHz就是采樣率。我們常見的CD,采樣率為44.1kHz。光有頻率信息是不夠的,我們還必須獲得該頻率的能量值並量化,用於表示信號強度。量化電平數為2的整數次冪,我們常見的CD位16bit的采樣大小,即2的16次方。采樣大小相對采樣率更難理解,因為要顯得抽象點,舉個簡單例子:假設對一個波進行8次采樣,采樣點分別對應的能量值分別為A1-A8,但我們只使用2bit的采樣大小,結果我們只能保留A1-A8中4個點的值而舍棄另外4個。如果我們進行3bit的采樣大小,則剛好記錄下8個點的所有信息。采樣率和采樣大小的值越大,記錄的波形更接近原始信號。

2.3有損和無損

根據采樣率和采樣大小可以得知,相對自然界的信號,音頻編碼最多隻能做到無限接近,至少目前的技術只能這樣了,相對自然界的信號,任何數字音頻編碼方案都是有損的,因為無法完全還原。在計算機應用中,能夠達到最高保真水平的就是PCM編碼,被廣泛用於素材保存及音樂欣賞,CD、DVD以及我們常見的WAV文件中均有應用。因此,PCM約定俗成了無損編碼,因為PCM代表了數字音頻中最佳的保真水準,並不意味著PCM就能夠確保信號絕對保真,PCM也只能做到最大程度的無限接近。我們而習慣性的把MP3列入有損音頻編碼范疇,是相對PCM編碼的。強調編碼的相對性的有損和無損,是為了告訴大家,要做到真正的無損是困難的,就像用數字去表達圓周率,不管精度多高,也只是無限接近,而不是真正等於圓周率的值。

2.4頻率與采樣率的關系

采樣率表示了每秒對原始信號采樣的次數,我們常見到的音頻文件采樣率多為44.1KHz,這意味著什麼呢?假設我們有2段正弦波信號,分別為20Hz和20KHz,長度均為一秒鍾,以對應我們能聽到的最低頻和最高頻,分別對這兩段信號進行40KHz的采樣,我們可以得到一個什麼樣的結果呢?結果是:20Hz的信號每次振動被采樣了40K/20=2000次,而20K的信號每次振動只有2次采樣。顯然,在相同的采樣率下,記錄低頻的信息遠比高頻的詳細。這也是為什麼有些音響發燒友指責CD有數碼聲不夠真實的原因,CD的44.1KHz采樣也無法保證高頻信號被較好記錄。要較好的記錄高頻信號,看來需要更高的采樣率,於是有些朋友在捕捉CD音軌的時候使用48KHz的采樣率,這是不可取的!這其實對音質沒有任何好處,對抓軌軟體來說,保持和CD提供的44.1KHz一樣的采樣率才是最佳音質的保證之一,而不是去提高它。較高的采樣率只有相對模擬信號的時候才有用,如果被采樣的信號是數字的,請不要去嘗試提高采樣率。

亨利·奈奎斯特(Harry Nyquist)采樣定理:當對連續變化的信號波形進行采樣時,若采樣率fs高於該信號所含最高頻率的兩倍,那麼可以由采樣值通過插補技術正確的回復原信號中的波形,否則將會引起頻譜混疊(Aliasing),產生混疊噪音(Aliasing Noise),而重疊的部分是不能恢復的.(同樣適用於模擬視頻信號的采樣)

根據人聲語音的特點,人類的聽力感知范圍是從20Hz到20kHz。這個頻寬范圍被劃分成四個頻寬類別:窄帶、寬頻、超寬頻和全帶。

窄帶(narrowband)普通電話所覆蓋的頻寬,從300Hz到3.4kHz,對應采樣率6.8kHz。普通電話的采樣率是8kHz,對應頻寬4kHz,對於人聲語音是足夠的。

寬頻(wideband)從50Hz到7kH的頻寬,對應采樣率14khz,可以很好地捕捉和還原人聲,然而對於音樂聲還是不夠的。這是在人聲語音通話場景下的所謂高清語音。

超寬頻(super-wideband)從50Hz到14kHz,對應采樣率28kHz,基本可以覆蓋人聲和音樂聲,對於非專業音樂人的用戶來說,不管是人聲通話還是音樂直播,這樣的頻寬都是足夠的。

全帶(fullband)從20Hz到20kHz,對應40kHz采樣率,全面覆蓋人類的聽覺范圍,能夠滿足音樂發燒友或者專業音樂人的需求。超過40Hz都可以稱作全帶語音。CD的采樣率就是44.1kHz。

因此,窄帶(narrowband)的音質是能滿足人聲錄制回放的。

從四個角度衡量音頻編碼:

成本:開發成本,伺服器流量成本

音質:

系統影響:對系統資源的暫用,軟編解碼器比硬編解碼器佔用更多cpu

兼容性:對移動端以及web端的兼容

適合產品場景的編碼器具備以下四個特點

碼率相對低,滿足成本可控的要求,一般不要超過16kbps。一個sample用1bit就能編好,那麼8kHz采樣率(narrowband)對應8kbps的碼率,16kHz采樣率(wideband)對應16kbps的碼率。碼率的本質就是成本。

演算法復雜度要比較低,對系統CPU、內存和電量消耗少,對系統影響要盡量低。

音質可以適當作出犧牲,以保障上面三個因素,8kHz采樣率對人聲場景是夠用的,16kHz采樣率可以提供高清語音。

兼顧兼容性

3.主流音頻編碼器

音頻編碼格式的比較: https://zh.wikipedia.org/wiki/%E9%9F%B3%E9%A2%91%E7%BC%96%E7%A0%81%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%AF%94%E8%BE%83

下圖列舉一組主流的音頻編解碼器,展示了隨著碼率變化,音質相應變化的情況。這是基於編解碼器聽音測試的結果繪畫出來的,對選取音頻編解碼器有參考意義。根據上面的分析並且參照下圖,發現碼率低於16kbps的低碼率人聲編解碼器(speech codecs)包含:Opus(SILK),Speex,AMR-NB,AMR-WB,和iLBC。

下圖是另外一組主流的音頻編解碼器,展示了隨著碼率的變化,演算法延遲時間相應變化的情況。根據上面的分析並且參照下圖,發現演算法延遲時間低於60毫秒,碼率低於16kbps的人聲編解碼器(speech codecs)包含:Opus(SILK)、Speex(NB,WB)、G.729、和G.729.1。

從圖中我們可以獲得如下幾方面信息:

對於固定碼率的編碼標准:如G.711或者G.722,圖中採用單點表示,說明這兩個編碼標準是固定碼率編碼標准。其他如Opus、Speex,它們的曲線是連續的,說明這類編碼標準是可變碼率的編碼標准。

從頻帶方面看:G.711、G.722、AMR和iLBC等標准適用於narrowband(8khz采樣率)和wideband(16khz采樣率)范圍,針對普通的語音通話場景。AAC和MP3適用於fullband(48khz采樣率)范圍,針對特殊的音樂場景。而Opus適用於整個頻帶,可以進行最大范圍的動態調節,適用范圍最廣。

從標準的收費情況看:適用於互聯網傳輸的iLBC、Speex和Opus都是免費且開源的;適用於音樂場景的MP3和AAC,需要license授權,而且不開源。

綜合上面的兩個圖,我們可以大致總結,比較適合人聲短語音的音頻編解碼器包含Opus(SILK)、Speex(NB,WB)、AMR-NB、AMR-WB、iLBC、G.729、和G.729.1。

碼率采樣率演算法延遲

OPUS(SILK)6-12,7-25,

8-30,12-40kbps

8,12,

16,24kHz

25ms

Speex2.15–24.6 kbps (NB)

4–44.2 kbps (WB)

8, 16,

32, 48kHz

30 ms(NB)

34 ms (WB)

AMR-NB4.75, 5.15, 5.90,

6.70, 7.40, 7.95,

10.20, 12.20 kbps

8kHz25ms (20ms per frame

plus 5ms look-ahead,

20ms for 12.2 kbps)

AMR-WB6.60, 8.85, 12.65,14.25, 15.85, 18.25, 19.85, 23.05, 23.85 kbps16kHz25ms (20ms per frame

plus 5ms look-ahead)

iLBC13.33 kbps

15.20 kbps

8kHz25 ms

40 ms

G.7298kbps8kHz15 ms

G.729.18 kbps,

12–32 kbps

8kHz

16kHz

48.94ms

Codec20.7, 1.2, 1.3, 1.4,

1.6, 2.4, 3.2 kbps

8kHz20–40 ms

(額外增加的,超低碼率)

短語音不同於實時語音,可以忽略延遲

上面都是為人聲場景設計的低碼率音頻編解碼器,具有碼率低(16kbps以下),演算法延遲低(大部分在40ms以下),和采樣率在8kHz和16kHz之間的特點,都可供短語音編碼方案選擇。其中,有幾個語音編解碼器值得在這里稍作介紹:

Opus(SILK)

https://en.wikipedia.org/wiki/Opus_(audio_format)

完全開源而且免費,包含了SILK、CELT、以及兩者的混合模式,是目前最為兼容並包的音頻編解碼器。在處理窄帶和寬頻人聲語音(speech)的時候,採用SILK; 在處理超寬頻和全帶音樂聲音(music)的時候,採用CELT。在人聲和音樂聲混合的場景中,甚至可以智能切換兩個編解碼器。WebRTC就採用了Opus作為語音編解碼器。而SILK是Skype網路電話所用的語音編解碼器。Opus真可謂是久經考驗的名門精品。根據即構科技的測試結果,Opus雖然在音樂場景中表現並非首選,但是在人聲場景中表現十分出色。

iLBC

完全開源而且免費的,由GIPS開發並被IETF標准化,曾經被QQ和Skype使用過,現在被WebRTC使用,是被世界頂級產品證明過的窄帶實時語音編解碼器。iLBC能夠通過平滑降低語音質量的方式來處理IP網路丟包。由於iLBC的語音幀塊之間是相互獨立的,在丟幀出現的時候也不會導致錯誤蔓延,因此具有較強的抗丟包能力。在窄帶應用環境中,iLBC具有延遲低,無斷續或雜音的特點,通話效果可以和行動電話媲美。

Speex

免費的人聲音頻編解碼器。因為Speex是為VoIP專門設計的,所以Speex對IP網路有很強的抗丟包能力。為了達到這個目的,Speex採用了CELP演算法。市場上狼人殺產品的游戲實時語音技術,廠商自研的方案採用了Speex。

Codec2

開源並且專利免費,碼率超低的人聲語音編解碼器。碼率在0.7 kbps至3.2 kbps。Codec2填補了開源編碼器在5 kbps碼率以下的空白。

評估音頻編碼指標,除碼率、采樣率、和演算法延遲以外,還要參考MOS、VBR/CBR、和基礎演算法等。其中,MOS (Mean Opinion Score)是語音編解碼器的主觀評估指標。MOS是一個廣為接受的有統計意義的主觀聽音指標。上面音視頻編解碼器的列表沒有把它包含進去,是因為同一個編解碼器,在不同碼率下,表現出來的MOS值是會變化的。對一個音頻編解碼器給出一個固定的MOS值,反而會起誤導的作用。另外,雖然MOS值已經是主觀的聽覺測試評估結果,但是音頻工程師在選用音頻編解碼器的時候,還要以自己親身的聽感作為最終的依據。

下圖是Nokia在2011年的時候對Opus、AMR、和G.722.1C等音頻編解碼器在無噪音和有噪音的環境里做的MOS語音測試的結果。我們可以從語音測試的結果看出:

1)MOS值會隨著碼率變化。固定的MOS值並沒有絕對的參考意義。

2)在低碼率情況下,AMR-NB和AMR-WB都表現相對出色。

參考:

1.Getting Started with Audio & Video: https://developer.apple.com/library/content/referencelibrary/GettingStarted/GS_MusicAudio/_index.html

2.Opus ios: https://github.com/chrisballinger/Opus-iOS

3.android opus: https://gitlab.com/axet/android-opus

4.opus_android: https://github.com/louisyonge/opus_android

5.opuscodec: https://github.com/martoreto/opuscodec

6.與大家討論如何用opencore amr在iOS上decode: https://blog.csdn.net/devday/article/details/6804553

7. ios支持 https://developer.apple.com/library/archive/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/CoreAudioEssentials.html#//apple_ref/doc/uid/TP40003577-CH10-SW13

F. tiktok如何更新版本

1、導航到AppStore或GooglePlay商店。
2、使用關鍵字「TikTok」進行搜索。
3、點擊應用程序。該應用程序的角落有一個音符和一個正弦波。開發者應該是BytemodPteLtd。(位元組跳動的子公司)。
4、點擊「更新」或「獲取」。將應用程序下載到您的iOS或Android設備以繼續使用該應用程序。
5、點擊「打開」。打開應用程序後,您必須使用現有的TikTok帳戶登錄才能繼續。如果您未登錄,您將被帶到登錄屏幕。

G. 關於Audiorecord采樣,怎麼能縮小read讀取數據的時間

如果是二進制文件,可以考慮用直接讀取方式。即 Open 時指定 access = 'direct'

如果是文本文件,且每一行的長度都是一樣的。也可以使用上述方式。
如果是文本文件,但每一行的長度不同。那麼 read 空語句也不會造成太大的時間開銷。
對於較大的數據,我建議使用二進制進行存儲。快速,高效,且誤差小。

H. 安卓開發音頻mic口怎麼接收20khz的波形

安卓開發音頻mic口接收20khz的波形的方法?
一、手機音頻通信的特點
1、 通用性強:在智能手機普及的今天,手機的對外通信介面多種多樣,而其中以3.5mm的音頻介面通用新最強,基本所有的手機、平板電腦都會有這個介面,所以在一些要求通用性的設備上,音頻介面登上了舞台。
2、 速率低:由於手機音頻部分的采樣頻率一般為44.1KHZ(部分國產山寨為8KHZ),這極大的限制了音頻通訊的速率。我們都知道44.1KHZ的采樣頻率,那麼最高的信號頻率只能為20KHZ左右,而信號周期也不可能只有2個采樣點,通常要到10個以上,這樣層層下來通訊速率可想而知。
3、 小信號:音頻通信的信號都是毫伏級的,各個手機廠商略有不同,但通常最大不超過200mv,通常我們通信使用的信號強度也就100mv左右,這導致信號比較容易受干擾,且在開發階段對工具有著種種限制。
二、 手機音頻通信分類
1、 無線方式:
a) 無線方式大家可能不太熟悉,容我慢慢道來。我們都知道人耳能聽到的聲音頻率為20HZ~20KHZ,而手機通信的信號頻率最高也就20KHZ,所以無線通信方式是可行的。因為雖然人耳的極限聽力能到20KHZ,但普通人一般在19KHZ以上時基本就聽不到了,所以如果信號的強度比較弱,且控制在19KHZ到20KHZ之間,那麼我們就可以將之當做是「超聲波」來看待了。
b) 其實在此提到手機音頻通信的無線方式,算是給大家一種產品開發思路吧。它的通訊半徑在10M左右,前景還是很廣闊的,大家有興趣的可以試試。(其實已經有這方面的產品了)
2、 有線方式:
a) 有線方式分為單向(設備→手機)和雙向兩種,單向的限制少,開發難度也小一些,但實際應用時會受限制。而雙向通信限制多,開發難度也大一些,但實際應用時更方便些。
b) 設備→手機:曼徹斯特編碼;FSK;DTMF;自定義正弦波
c) 手機→設備:由於手機輸出的音頻信號很小,無法直接使用,要麼用運放發大到合適的范圍,要麼用電壓比較器轉換成TTL方波。
三、手機音頻通信硬體通信方式分類:手機音頻通信的硬體通信方式大體可分為方波和正弦波兩種。
1、 方波:方波通常使用的是曼徹斯特編碼方式(什麼是曼徹斯特編碼自己去查),它的好處是可以用單片機直接輸出方波,經過衰減後即可使用,方便簡單。缺點是兼容性不好,因為手機音頻部分有這樣一個特性,它只識別變化的電平信號,當麥克輸入的信號長時間保持在某一非零電平時,手機會將其視為零,而強行拉回零電位。這就是採用方波通訊方式的兼容性不好的最大原因了,並且方波也容易受干擾。
2、 正弦波:正弦波不會出現上面所說的方波的問題,故正弦波的兼容性和穩定性更好一些。通常採用方案有FSK、DTMF、信號發生器、或方波轉正弦波等。(後面會對以上方案逐一分析)
3、 通信信道分析
a) 我們知道音頻介面有4根線,MIC、地、左、右聲道。設備→手機用MIC,手機→設備用地、左、右聲道中的任意一個。這里說一下,實際產品中,有一些廠家會更換地線,即將原本左、有聲道中的一根改為地線來用,其實道理是一樣的。因為音頻通信的信號時交流信號,而地其實也是懸浮地,即便地線換了,最終的波形還是一樣的,因為最終手機解析信號時需要的是頻率和幅值。這樣還剩下一個聲道,通常被用來幫助設備進行上電識別,因為音頻通信的設備通常都是電池供電的。
b) 另外還要在MIC和地之間並聯一個4.99K的電阻,因為手機是通過檢測MIC和地之間的阻抗是否為4.99K(也有其他阻值的)來判斷是否有設備(耳機)插入,這一點要謹記。
四、各個通信方案對比分析
1、 設備→手機:
a) 曼徹斯特編碼:在諸多通信方式中,曼徹斯特編碼是最靈活簡便的一種方法,編碼信號可由單片機直接產生,經衰減電路衰減後便可直接使用。注意事項:曼徹斯特編碼信號的生成有兩種方式,一種是用PWM生成,一種是用定時器中斷翻轉IO,我個人比較傾向於定時器中斷方式。因為我們知道曼徹斯特編碼中有寬沿河窄沿之分,且寬沿和窄沿可能會靈活變化,而用PWM方式不容易精確控制寬沿、窄沿輸出的變化,而定時器中斷方式則非常靈活且容易控制。(後面會送上我自己寫的曼徹斯特編碼、解碼函數)
b) FSK、DTMF方式:FSK和DTMF兩種方式大同小異,使用時通常都是用集成的晶元來生成的,而這些晶元通常都是遵守固定的通信協議的的要求(FSK為Bell202或V.23協議,DTMF記不清名字了)。這兩種通信方式的優點是採用正弦波通信、穩定性好且使用簡便。但由於固定通信協議的限制導致通信速率、比特率也受到限制而缺乏靈活性。在這里跟他家推薦一款英國的通信晶元CMX系列,這個系列的晶元融合的FSK、DTMF的編碼、解碼,還是很不錯的,大家有興趣可以試試。(相關手冊在附件里)
c) 信號發生器、鎖相環方式:這種方式用信號發生器或者鎖相環來產生方波或正玄波,由單片機來控制波形的輸出,也可以實現音頻通信,且十分靈活。但缺點是電路較復雜,且不同頻率信號之間銜接不好掌握,用不好反而是麻煩。(相關手冊在附件里)
d) 在這里送上一種我個人認為比較好的方案:就是曼徹斯特編碼加低通濾波器,由單片機輸出曼徹斯特編碼,再經由低通濾波器將方波濾成正弦波後輸出。既解決了FSK、DTMF靈活性的問題,又解決了曼徹斯特編碼方波穩定性、通用性的問題。在低通濾波器方面我個人採用的是「集成低通開關電容濾波器」,它成本雖然高一些,但好處也是明顯的,電路簡單,使用方便,且佔用的空間亦很小。(相關手冊在附件里)
2、 手機→設備:
a) 放大電路方式:將手機輸出信號經放大電路放大到合適的幅值,然後有鎖相環或者結成FSK、DTMF晶元進行解析。該中方式難度最大,需要非常強的模擬電路功底,我個人水平有限,故採用的另一種方式。
b) 電壓比較器方式:將手機輸出的交流信號經電路強行拉到Vcc/2級別,然後加到電壓比較器一端,另一段接比較電壓Vcc/2,這樣交流信號即被轉化為TTL方波信號,此時再進行解析就變得很簡單了。
五、研發注意事項(通訊方案分析部分由於過長,放到最後來講)
1、 一個好手機錄音軟體是必須的,最好能在手機上直接看到波形的。
2、 建議用筆記本電腦進行開發,而非台式機。因為音頻信號很小,容易受干擾,而台式機干擾較大,筆記本還有一個好處是必要時可將外接電源拔掉,用電池供電。
3、 一個好錄音筆必不可少,有時需要得到純凈的音頻信號,方便更加准確的分析。
4、 做一個轉接板,一邊接音頻母座,一邊接音頻公頭,將MIC、地、左、右聲道4跟線用排陣引出,方便錄音。
5、 做一個信號衰減電路,可將設備電路產生的信號衰減至音頻介面能承受的范圍內。前期調試時,我們可以用該電路將信號錄進電腦進行信號分析。(推薦一個電腦音頻信號分析軟體:Goldwave)
6、 錄音用的音頻線切記不要太長,不然會給你帶來不少麻煩。最好自己做,用音頻裸頭、杜邦線、排陣即可製作,方便好用。

曼徹斯特編碼的編碼解碼函數如下:
/**********************************************************************

注釋:編碼函數都是採用定時器中斷的形式,以曼徹斯特編碼的窄沿作為定時器周期。

發送的數據包括1個起始位、8個數據位、1個奇偶校驗位、3個停止位。

***********************************************************************/

static void VIC_VECT_Fucton_00(void)//發送編碼數據中斷函數

{

TIMER0IS =0x0;

if((send_time%2==0) && (send_start==1))

{

switch(FSK_txState)

{

case STARTBIT:

if((GPIODATA&0x00000002)==0x00000000)//如果檢測到數據發送管腳為零

send_time++;

else

{

currentSym=0;

FSK_txState = BYTE;

}

break;

case BYTE:

if(txBit < 8)

{

currentSym = (send_byte >> txBit) & 0x01;

txBit++;

txParity += currentSym; //奇偶校驗位

}

else if (txBit == 8)

{

currentSym = txParity & 0x01; //發送奇偶校驗位

txBit++;

}

else if(txBit>8 && txBit<12)

{

// next bit is the stop bit

currentSym = 1; //發送停止位

txBit++;

}

else if(txBit == 12)

FSK_txState = STOPBIT;

break;

case STOPBIT :

txBit=0;

FSK_txState=IDLE;

send_start=0;

txParity=0;

send_byte=0;

break;

}

if(lastSym!=currentSym)

{

timer1_num++;

lastSym=currentSym;

}

}

if(timer1_num%2==0)

GPIODATA&=0xFFFFFFFD;//輸出管腳復位

else

GPIODATA|=0x00000002;//輸出管腳置位

timer1_num++;//用來控制IO口的電平翻轉

send_time++;//用來控制發送的位元組的每一位

Delay++;//Delay就是延時函數

}

/**********************************************************************

注釋:解碼函數採用外部IO中斷形式(上升沿或下降沿中斷,即電平電平跳變中斷),

用一個定時器作為時鍾,每次產生中斷時便從定時器見時間值取出,並和上一次的

記錄做差求出時間間隔,以此來判斷當前為寬沿還是窄沿。

***********************************************************************/

static void VIC_VECT_Fucton_04(void)//接受解碼數據中斷函數

{

GPIOIC|=0x00000001;//清楚上一次中斷內容

RX_time=TIMER1VALUE;

if(RX_lasttime>=RX_time)

RX_diff=RX_lasttime-RX_time; //lasttime初始值為0

else

RX_diff=65535-RX_time+RX_lasttime;

RX_lasttime=RX_time;

switch(RX_state) //啟動代碼時state已經被配置為STARTBIT

{

case STARTBIT_FALL:

if ((SHORTINTERVAL<RX_diff) && (RX_diff<LONGINTERVAL))

{

if(RX_ones<5) //ones初始值為0

{

RX_ones = 0;

}

else

{

RX_state = DECODE; //將狀態配置為解碼

}

}

else if(RX_diff < SHORTINTERVAL)

RX_ones++;

else

RX_ones=0;

break;

case DECODE:

/**************通過間隔長短來判定數據**************/

if ((SHORTINTERVAL<RX_diff) && (RX_diff<LONGINTERVAL))// 若間距在范圍內則當前數據位值和前一個相反

{

currentbit=(currentbit+1)&0x01;

RX_times+=2;

}

else if( RX_diff < SHORTINTERVAL)

{

currentbit=currentbit;

RX_times++;

}

else

RX_state = DATAINIT;

/****************接受數據位,從低位接起****************/

if(RX_times%2==0)

{

if(RX_bitcounter<8)

{

if (currentbit==1)

{

uartByteRx = (uartByteRx >> 1) + (1<<7);

rxParity++; //奇偶校驗位

RX_bitcounter++; //接受數據位數

}

else

{

uartByteRx = (uartByteRx >> 1);

RX_bitcounter++;

}

}

else

{

rxParity&=0x01; //進行奇偶校驗

if(rxParity==currentbit)

{

RX_bitcounter++;

RX_finish=1;

RX_state=DATAINIT;

}

else

RX_state=DATAINIT; //若奇偶校驗錯誤則,重新檢測

}

}

break;

case DATAINIT : //初始化參數狀態

RX_bitcounter=0;

RX_ones=0;

rxParity=0;

currentbit=0;

RX_state=STARTBIT_FALL;

RX_times=0;

break;

default:

break;

}

}

I. 有沒有大神 用Android實現仿照Siri聲波曲線

代碼實現

波浪其實是由4條貝塞爾曲線組成的,可以在自定義View的onDraw函數中,用Path.quadTo函數畫出4條曲線。

Path.quadTo(float x1, float y1, float x2, float y2)

其中,x1,y1為控制點的坐標值,x2,y2為終點的坐標值;當控制點的x1位於起點與終點之間時,將畫出正弦曲線,此時y1控制正弦曲線的高度,即效果圖中波浪的高度由y1控制。
實現了曲線繪制和高度控制之後,如何讓曲線像波浪一樣動起來呢?
我的解決方法是在屏幕左邊,即x<0的位置,同樣繪制4條正弦曲線,並且啟動線程讓8條曲線都向右移動,當左邊4條曲線全部移動到屏幕內後,讓這8條曲線復位。如此周期進行。
解析

使用方法

在xml中,

<com.tao.view.SiriView
android:id="@+id/siriView"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_centerInParent="true"/>

在Activity.Java中,

SiriView siriView = (SiriView) findViewById(R.id.siriView);
// 停止波浪曲線
siriView.stop();
// 設置曲線高度,height的取值是0f~1f
siriView.setWaveHeight(0.5f);
// 設置曲線的粗細,width的取值大於0f
siriView.setWaveWidth(5f);
// 設置曲線顏色
siriView.setWaveColor(Color.rgb(39, 188, 136));
// 設置曲線在X軸上的偏移量,默認值為0f
siriView.setWaveOffsetX(0f);
// 設置曲線的數量,默認是4
siriView.setWaveAmount(4);
// 設置曲線的速度,默認是0.1f
siriView.setWaveSpeed(0.1f);

閱讀全文

與android正弦波相關的資料

熱點內容
51單片機程序單步視頻 瀏覽:239
家庭寬頻如何連接伺服器 瀏覽:117
汽車高壓泵解壓 瀏覽:770
上門正骨用什麼app 瀏覽:758
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:625
python和matlab難度 瀏覽:388
python爬蟲很難學么 瀏覽:572
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:564
怎麼升級手機android 瀏覽:923
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:497
軟考初級程序員大題分值 瀏覽:475
js壓縮視頻文件 瀏覽:580
linux如何通過命令創建文件 瀏覽:991
應用加密app還能訪問應用嘛 瀏覽:435
安卓怎麼用支付寶交違章罰款 瀏覽:667
php面向對象的程序設計 瀏覽:506