[問題] 系統對音樂速度的嚴謹度

看板Programming作者 (DoubleLight)時間11年前 (2013/03/01 12:31), 編輯推噓4(4025)
留言29則, 5人參與, 最新討論串1/4 (看更多)
因為個人興趣的關係,經常會處理一些音樂專案, 這邊先提一下一些音樂小知識, 音樂有所謂BPM(beats per minute), 也就是一分鐘會有幾拍,通常古典音樂會在120-150左右, 現代搖滾180左右,都是作曲家(和演奏家)隨自己意思決定這樣。 這邊可以看出音樂速度系統是非常"類比"的(這樣形容不知道對不對), 電腦的作業方式是依靠tick運作,速度越快的音樂tick間隔越短, 將tick與拍子進行同步,就能依照速度播放音樂了, 但要如何做? 將BPM逆算回來,求出一拍的間隔就是60 / bpm 拿現代搖滾180來說,這麼一算正好是1/3,除不盡呀, 還沒算上分音符,音符流動最小間隔不是只有一拍, 通常還會有8分音符 16分音符,過分一點還有32分音符, 這樣就還要再除8,才能滿足所有最小間隔。 因為絕大多數的BPM算出來都是循環小數, 那作業系統是怎麼處理那些除不盡的餘數呢? 有多精細?毫秒?微秒?奈秒? 怎麼處理?直接捨去? -- 我覺得安麗是世界上最強的直銷了 秀丞科美如雅葡賀美▁▁▁▁ 其他的應該廢除 得燕士安新芳眾寶樂 ██ - 美公威公公公公芙家 □–□ 如果各位有興趣的話可以加入我們安麗 公司公司司司司公公 但是要經過選拔      司司  因為我們只會接受精英 絕對不會接受垃圾@ 圖ψ /◣– /█◣ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.125.7.37

03/01 17:07, , 1F
輸出的DA也只跑在90khz.... 再高上去也沒有用
03/01 17:07, 1F

03/01 18:13, , 2F
準到毫秒的話 1/3 一秒也只會差一毫秒
03/01 18:13, 2F

03/01 18:14, , 3F
也就是曲子要超過 16 分鐘才會有一秒誤差
03/01 18:14, 3F

03/01 18:14, , 4F
對人類而言根本沒差...
03/01 18:14, 4F
對,我知道音樂這種東西畢竟是要給人類聽的,不必太在意細節, 但我想知道...有沒有某種大家都講好的協定? 如果不同的音訊處理用不同的頻率算法, 歌曲一長,最後還是會聽得出來吧? ※ 編輯: stu87616 來自: 120.125.7.18 (03/01 18:59)

03/01 20:01, , 5F
唔..我不太明白為什麼誤差可以累增近一秒
03/01 20:01, 5F

03/02 22:53, , 6F
先想想看你的"音開始"要怎麼在聲波中定義
03/02 22:53, 6F

03/02 22:55, , 7F
看對聲波要多久取一個樣,接著就把拍子round
03/02 22:55, 7F

03/02 22:55, , 8F
到對接近的點
03/02 22:55, 8F

03/03 18:48, , 9F
精細度跟你用到的硬體有關
03/03 18:48, 9F

03/03 18:49, , 10F
如果你是用mcu類的發音 處理器都是MHZ等級
03/03 18:49, 10F

03/03 18:50, , 11F
精細度至少是 us 如果是說win 平台上的音
03/03 18:50, 11F

03/03 18:50, , 12F
效卡之類的 上面的處理器應該更快
03/03 18:50, 12F

03/03 18:54, , 13F
至於除不盡的問題 基本上算式是以 MCU 產
03/03 18:54, 13F

03/03 18:54, , 14F
生多少波形來算的(方波) 所以每次都會更新
03/03 18:54, 14F

03/03 18:54, , 15F
波形數 理論上誤差不應該會累積
03/03 18:54, 15F

03/04 01:42, , 16F
音效最高只有看過19xkHz的...,重點在有DA所以
03/04 01:42, 16F

03/04 01:42, , 17F
不是方波吧
03/04 01:42, 17F

03/04 19:00, , 18F
因為原PO問題在於音樂曲調與電腦運作的差
03/04 19:00, 18F

03/04 19:01, , 19F
異 所以我直覺是認為他是在問 AD 的誤差
03/04 19:01, 19F
抱歉,其實我根本看不懂AD和DA這些縮寫是啥(汗 看你們提到波型之類的,似乎是指wav音頻, 我主要是想問,像是midi這類由電腦自行生成的類型, 速度的儲存位址可能就只有一個數字(BPM),那能夠多嚴謹? ※ 編輯: stu87616 來自: 1.163.69.63 (03/05 00:24)

03/05 01:37, , 20F
midi的bpm是推算出來的
03/05 01:37, 20F

03/05 01:38, , 21F
實際儲存的是每拍時間長度(整數微秒)
03/05 01:38, 21F
                    ↑↑↑↑就是這個 這個"整數微秒"怎麼決定好的? 如我在意的,一定除不乾淨嘛,怎麼處理那些餘數?

03/05 01:38, , 22F
另外再一個整數決定每拍幾個tick
03/05 01:38, 22F

03/05 01:38, , 23F
所有的事件都會發生再tick上
03/05 01:38, 23F

03/05 01:39, , 24F
所以其實全部都是整數運算
03/05 01:39, 24F

03/05 01:39, , 25F
至於跟實際時間的差距
03/05 01:39, 25F

03/05 01:40, , 26F
一般應用會以音樂時間為準
03/05 01:40, 26F

03/05 01:43, , 27F
所以根本不會去理實際時間
03/05 01:43, 27F
※ 編輯: stu87616 來自: 1.162.164.225 (03/05 10:40)

03/05 10:53, , 28F
除不乾淨就除不乾淨啊
03/05 10:53, 28F

03/05 10:54, , 29F
從計時器開始就不準了
03/05 10:54, 29F
文章代碼(AID): #1HC2y9Mp (Programming)
討論串 (同標題文章)
文章代碼(AID): #1HC2y9Mp (Programming)