【问题标题】:using bass library to decode mp3 file使用低音库解码 mp3 文件
【发布时间】:2013-05-02 17:34:55
【问题描述】:

如何使用 C# 中的 bass 库将 Mp3 文件转换为自定义样本数据? 自定义意味着我想要产生某些属性,例如单声道和 5000hz! 我之前尝试过这段代码,但它不起作用!

public float[] ReadMonoFromFile(string filename, int samplerate, int 毫秒,int startmillisecond) {

int totalmilliseconds = 
    milliseconds <= 0 ? Int32.MaxValue : milliseconds + startmillisecond;
float[] data = null;
//create streams for re-sampling
int stream = Bass.BASS_StreamCreateFile(filename, 0, 0, 
    BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_MONO | 
    BASSFlag.BASS_SAMPLE_FLOAT); //Decode the stream
if (stream == 0)
    throw new Exception(Bass.BASS_ErrorGetCode().ToString());
int mixerStream = BassMix.BASS_Mixer_StreamCreate(samplerate, 1, 
    BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_MONO | 
    BASSFlag.BASS_SAMPLE_FLOAT);
if (mixerStream == 0)
    throw new Exception(Bass.BASS_ErrorGetCode().ToString());
if (BassMix.BASS_Mixer_StreamAddChannel(mixerStream, stream, BASSFlag.BASS_MIXER_FILTER))
{
    int bufferSize = samplerate * 10 * 4; /*read 10 seconds at each iteration*/
    float[] buffer = new float[bufferSize];
    List<float[]> chunks = new List<float[]>();
    int size = 0;
    while ((float) (size)/samplerate*1000 < totalmilliseconds)
    {
        //get re-sampled/mono data
        int bytesRead = Bass.BASS_ChannelGetData(mixerStream, buffer, bufferSize);
        if (bytesRead == 0) 
            break;
        float[] chunk = new float[bytesRead/4]; //each float contains 4 bytes
        Array.Copy(buffer, chunk, bytesRead/4);
        chunks.Add(chunk);
        size += bytesRead/4; //size of the data
    }

    if ((float) (size)/samplerate*1000 < (milliseconds + startmillisecond))
        return null; /*not enough samples to return the requested data*/
    int start = (int) ((float) startmillisecond*samplerate/1000);
    int end = (milliseconds <= 0) ? size : 
       (int) ((float) (startmillisecond + milliseconds)*samplerate/1000);
    data = new float[size];
    int index = 0;
    /*Concatenate*/
    foreach (float[] chunk in chunks)
    {
        Array.Copy(chunk, 0, data, index, chunk.Length);
        index += chunk.Length;
    }
    /*Select specific part of the song*/
    if (start != 0 || end != size)
    {
        float[] temp = new float[end - start];
        Array.Copy(data, start, temp, 0, end - start);
        data = temp;
    }
}
else
    throw new Exception(Bass.BASS_ErrorGetCode().ToString());
return data; }

我这样调用这个函数:

float[] pcm = ReadMonoFromFile(Path.GetFullPath("1.mp3"), 0, 0, 0);

但在抛出此异常:'Un4seen.Bass.Bass' 的类型初始化程序抛出异常。

【问题讨论】:

  • 我保证它说的不仅仅是“抛出异常”

标签: c# bass


【解决方案1】:

将 Bass.dll 添加到您的 bin 文件夹中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 2016-08-24
    • 2012-10-18
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多