トップページ > 記事閲覧
ステレオ→モノラルに変換したい
名前:もずく 日時: 2021/06/30 23:03

はじめまして 質問内容はタイトルのとおりなのですが、読み込んだステレオな音声ファイルをモノラルに変換する方法はありますか?
メンテ

Page: 1 |

Re: ステレオ→モノラルに変換したい ( No.1 )
名前:もずく 日時:2021/06/30 23:36

ステレオ音源の左側(もしくは右側)の音だけを抽出してそれをモノラルで再生したいです なにか良い方法があれば教えていただけると嬉しいです
メンテ
Re: ステレオ→モノラルに変換したい ( No.2 )
名前:管理人 日時:2021/07/02 00:54

LoadSoftSound でソフトサウンドとして読み込むと ReadSoftSoundData で音声のサンプルデータを 取得することができますので、それを MakeSoftSoundCustom で作成したモノラルのソフトサウンドに WriteSoftSoundData で書き込んで、作成したモノラルのソフトサウンドを LoadSoundMemFromSoftSound で 通常のサウンドハンドルにすることでステレオ音源からモノラルのサウンドハンドルを作成することができます 上記の処理を行ってステレオ音源からモノラルのサウンドハンドルを作成する処理の サンプルを作成してみましたので、よろしければご覧ください m(_ _)m #include "DxLib.h" // 指定のチャンネルのみのモノラルサウンドハンドルを作成する // SoundFilePath : サウンドファイルのパス // ChannelIndex : 使用するチャンネル( 0:左 1:右 ) int MakeMonoSoundHandle( const char *SoundFilePath, int ChannelIndex ) { int SrcSoftSoundHandle ; int DstSoftSoundHandle ; int SoundHandle ; int Channels, BitsPerSample, SamplesPerSec, IsFloatType ; LONGLONG SampleNum ; // 指定のチャンネルは 0 か 1 のみ対応 if( ChannelIndex != 0 && ChannelIndex != 1 ) { return -1 ; } // サウンドファイルをソフトサウンドとして読み込む SrcSoftSoundHandle = LoadSoftSound( SoundFilePath ) ; // サウンドファイルの読み込みに失敗した場合はエラー if( SrcSoftSoundHandle < 0 ) { return -1 ; } // サウンドファイルのフォーマットを取得 GetSoftSoundFormat( SrcSoftSoundHandle, &Channels, &BitsPerSample, &SamplesPerSec, &IsFloatType ) ; // 指定のチャンネルが存在しない場合はエラー if( Channels <= ChannelIndex ) { return -1 ; } // サウンドファイルのサンプル数を取得 SampleNum = GetSoftSoundSampleNum( SrcSoftSoundHandle ) ; // チャンネルが1つで同じビットレートのソフトサウンドハンドルを作成 DstSoftSoundHandle = MakeSoftSoundCustom( 1, BitsPerSample, SamplesPerSec, SampleNum, IsFloatType ) ; // float型のサウンドかどうかで処理を分岐 if( IsFloatType == TRUE ) { float Sample1F, Sample2F ; // float型の場合 // 指定のチャンネルのサンプルデータを転送 for( int i = 0 ; i < SampleNum ; i ++ ) { ReadSoftSoundDataF( SrcSoftSoundHandle, i, &Sample1F, &Sample2F ) ; WriteSoftSoundDataF( DstSoftSoundHandle, i, ChannelIndex == 0 ? Sample1F : Sample2F, 0.0f ) ; } } else { int Sample1I, Sample2I ; // 整数型の場合 // 指定のチャンネルのサンプルデータを転送 for( int i = 0 ; i < SampleNum ; i ++ ) { ReadSoftSoundData( SrcSoftSoundHandle, i, &Sample1I, &Sample2I ) ; WriteSoftSoundData( DstSoftSoundHandle, i, ChannelIndex == 0 ? Sample1I : Sample2I, 0.0f ) ; } } // モノラルのソフトサウンドからサウンドハンドルを作成する SoundHandle = LoadSoundMemFromSoftSound( DstSoftSoundHandle ) ; // ソフトサウンドハンドルを削除 DeleteSoftSound( SrcSoftSoundHandle ) ; DeleteSoftSound( DstSoftSoundHandle ) ; // サウンドハンドルを返す return SoundHandle ; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int SoundHandle ; // ウィンドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // ステレオサウンドの右側だけのモノラルサウンドのハンドルを作成する SoundHandle = MakeMonoSoundHandle( "StereoSound.wav", 1 ) ; // 再生 PlaySoundMem( SoundHandle, DX_PLAYTYPE_NORMAL ) ; // サウンドハンドルを削除 DeleteSoundMem( SoundHandle ) ; // DXライブラリの後始末 DxLib_End() ; return 0 ; } 上記のサンプルプログラムでは、ステレオ音源からモノラルのサウンドハンドルを作成する関数 『MakeMonoSoundHandle』を使用して、StereoSound.wav から右スピーカー用の音源のみを使用した モノラルのサウンドハンドルを作成して、PlaySoundMem で再生しています
メンテ
Re: ステレオ→モノラルに変換したい ( No.3 )
名前:もずく 日時:2021/07/02 02:02

提示してくださったサンプルプログラムを参考に自分のプログラムに組み込んでみたところやりたいことが実現できました ありがとうございました
メンテ

Page: 1 |

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

   クッキー保存