トップページ > 記事閲覧
ピッチシフト
名前:夢幻ノ月夜 日時: 2015/10/27 19:37

音声を再生するときに、 音の長さを変えずに音程を変えたいです。 専用の関数を作っていただけないでしょうか? 管理人の方でも有志の方でもいいので、 よろしくお願いします。
メンテ

Page: 1 |

Re: ピッチシフト ( No.1 )
名前:管理人 日時:2015/10/30 01:29

もしかしたらピッチシフトを簡単に実装することができるかもしれないので調べてみます ただ、平日の作業時間では足りそうにないので申し訳ありませんが週末までお待ちください m(_ _;m
メンテ
Re: ピッチシフト ( No.2 )
名前:管理人 日時:2015/11/02 02:31

調べてみました 結果、すみません、音の長さを変えずに音程を変える方法は分かったのですが、 ChangeVolumeSoundMem のように何時でもどこでも関数呼ぶだけで変更、みたいなのは少し実装が大変そうです・・・ LoadSoundMem の前に音程をどれだけ変化させるかを設定しておくと音程が変化した状態がサウンドが読み込まれる、 といったものでしたらある程度簡単に実装できそうなのですが、そのような機能でも問題ないでしょうか?
メンテ
Re: ピッチシフト ( No.3 )
名前:夢幻ノ月夜 日時:2015/11/09 23:00

多分大丈夫です 出来れば再生の方にも欲しいので 先に読み込みの方に実装していただいて その後ゆっくり再生の方は考えてください お願いします
メンテ
Re: ピッチシフト ( No.4 )
名前:管理人 日時:2015/11/10 00:50

ご返答ありがとうございます では先に読み込み時に音程を変化させる機能を作成してみますので少々お待ちください ( おそらく次の週末に作業することになると思います・・・ )
メンテ
Re: ピッチシフト ( No.5 )
名前:管理人 日時:2015/11/16 02:29

お待たせしました、音の長さを変えずに音程を変更する機能( ファイル読み込み時に変更する機能 )を追加しました よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 以下の関数を追加しました // 作成するサウンドハンドルのピッチレートを設定する // ( 設定できる値の範囲:0.25f 〜 2.0f // 1.0f:デフォルト // 1.0f以上:音程が高くなる // 1.0f以下:音程が低くなる ) int SetCreateSoundPitchRate( float PitchRate ) ; LoadSoundMem でサウンドデータを読み込む前に使用します、たとえば SetCreateSoundPitchRate( 2.0f ) ; Handle = LoadSoundMem( "Test.wav" ) ; とすると、1オクターブ高い音になった状態で Test.wav が読み込まれます( 逆に 0.5f で1オクターブ低い音 ) 尚、音の長さを変えずに音程を変える処理は使用するアルゴリズムによって変換後の音質が かなり変わるのですが、今回実装した処理はかなりシンプルなものなのでサウンド編集ソフトや サウンド機能が充実したライブラリ等の音程変更機能と比べると変換後の音質は劣ります 今回実装した機能以上の音質にするのは現時点の私の力では難しそうなので、 もし変換後の音質が実用に耐えないということでしたら、申し訳ありませんがサウンド編集ソフト等を使用して 予め音程の異なる複数のサウンドファイルを用意したり、又は他のより高度なサウンド機能のあるライブラリなどを 使用してみてください m(_ _;m あと、現在は1オクターブ以上音程を上げることができませんが、もし必要でしたら実装しようと思いますが如何でしょうか? ( こちらも音質が満足ではない場合はそれ以前の話ですが )
メンテ
Re: ピッチシフト ( No.6 )
名前:yumetodo 日時:2015/11/16 17:34

横からすみません。ピッチシフトなんですが、ちょっと興味が湧いたので質問させてください。 以前私はAviUtlという動画編集ソフトのプラグイン、「PitchControl」というソフトについて、その作者さんとやり取りしたことがありました milk-tea.myvnc.com/blog/adiary.cgi/0155 このソフトは倍速編集時に音程を維持するもので、コメント欄で私が8倍速まで対応してほしいという要望を出しました。(結果実現しました) その話の中で「セント」という単位がでてきたのですが、DxLibの今回追加された部分と関連があるのでしょうか?(リンク先13, 18番のコメント参照)
メンテ
Re: ピッチシフト ( No.7 )
名前:夢幻ノ月夜 日時:2015/11/16 23:42

音質はいいんですが 出来れば上下共に4オクターブくらい変化させられませんかね?
メンテ
Re: ピッチシフト ( No.8 )
名前:管理人 日時:2015/11/18 01:46

> yumetodoさん セントは音程の単位みたいですね 100 で半音変化するという方式なので SetCreateSoundPitchRate のように周波数の倍率で 指定するより直感的で分かりやすそうです 実装直後に引数の単位を変更するのは好ましくないかもしれませんが、使いやすさを考えて SetCreateSoundPitchRate の引数の単位を倍率ではなくセントに変更しようと思います (・・;; > 夢幻ノ月夜さん 音質は問題ありませんか! ただ音程の変化率が上がれば上がるほど音質は悪くなるので4オクターブ変更した際に 実用に耐える音質になるかわかりませんが、対応してみようと思います 因みに yumetodoさんへのご返信の通り実装直後で申し訳ありませんが引数の単位を倍率から セントに変更しようと思います m(_ _;m
メンテ
Re: ピッチシフト ( No.9 )
名前:管理人 日時:2015/11/23 00:26

お待たせしました SetCreateSoundPitchRate で1オクターブ以上を指定できるようにしました よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) なお、引数の単位がセントになっていますので、音程を1オクターブ上げたい場合は 1200.0f を、 2オクターブ上げたい場合は 2400.0f を、逆に1オクターブ下げたい場合は -1200.0f を指定してください
メンテ
Re: ピッチシフト ( No.10 )
名前:yumetodo 日時:2016/02/22 14:54

もうだいぶ前の話を蒸し返してしまいますが、 SetCreateSoundPitchRate/GetCreateSoundPitchRate ってハンドル作成時にかかるものなんですね。 (内部的にはsoftsound経由でハンドルを作るようになる・・・?) ハンドルごとに再設定できても良さそうなんですがどうなんでしょうか。
メンテ
Re: ピッチシフト ( No.11 )
名前:管理人 日時:2016/02/28 02:53

> ハンドルごとに再設定できても良さそうなんですがどうなんでしょうか。 今のところ読み込みのタイミングでサウンド全体に対して変換を掛けるシンプルな実装なのですが、 気軽に変更できるようにきちんと実装しようとするとかなり色々な箇所を変更しなければならないので、 他に優先したいこともあるので保留中です (- -;;
メンテ
Re: ピッチシフト ( No.12 )
名前:yumetodo 日時:2016/03/01 10:54

では気が向いたらお願いします。1年後くらいにまたこの話を蒸し返しているかもしれませんが。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存