📜  tu hi hai aashiqui 歌词 - C++ (1)

📅  最后修改于: 2023-12-03 15:05:38.268000             🧑  作者: Mango

Tu Hi Hai Aashiqui

如果你是一个程序员,你可能已经听说过C++,这是一种具有强大功能的编程语言。但是,你是否知道你可以用C++来编写音乐程序呢?在这份介绍中,我将向您展示如何使用C++和OpenAL库来创建自己的音乐程序,并以 'Tu Hi Hai Aashiqui' 歌曲为例进行演示。

什么是OpenAL?

OpenAL是一个免费和开放源代码的跨平台音效API。它可让程序员通过一组API来处理3D音效和其他声音效果。

安装OpenAL

在使用OpenAL之前,你需要先下载并安装它。在Windows上,你可以从OpenAL官方网站下载OpenAL。对于其他操作系统,你可以从适当的源中安装OpenAL。

如何创建音乐程序?

要创建一个使用OpenAL的音乐程序,你需要使用一个或多个WAV文件。WAV文件是一种常见的音频文件格式,通常可以通过电子邮件或其他方式轻松获取。

预先准备你的歌曲

在我们开始编写代码之前,我们需要知道我们将使用哪个歌曲并准备好它。在本例中,我们将使用'Tu Hi Hai Aashiqui'歌曲(这是一首印度电影'Movie - Dishkiyaoon'的歌曲)。

当你已经有了这首歌曲,你需要将它保存为WAV文件以便稍后在OpenAL程序中使用。

创建C++程序

接下来,我们将创建一个C++程序,该程序将使用OpenAL库来播放先前准备好的WAV文件。下面是程序的核心代码:

#include <AL/al.h>
#include <AL/alc.h>
#include <cstdio>
#include <cstring>
#include <iostream>

#define BUFFER_SIZE 32768

//WAV文件要打开的位置
#define FILE_PATH "Tu_Hi_Hai_Aashiqui.wav"

//错误处理代码
void alCheckError(const char *msg) {
    ALenum err = alGetError();
    if (err != AL_NO_ERROR) {
        std::cerr << msg << ": ";
        switch (err) {
            case AL_INVALID_NAME:
                std::cerr << "Invalid name" << std::endl;
                break;
            case AL_INVALID_ENUM:
                std::cerr << " Invalid enum" << std::endl;
                break;
            case AL_INVALID_VALUE:
                std::cerr << "Invalid value" << std::endl;
                break;
            case AL_INVALID_OPERATION:
                std::cerr << "Invalid operation" << std::endl;
                break;
            case AL_OUT_OF_MEMORY:
                std::cerr << "Out of memory" << std::endl;
                break;
            default:
                std::cerr << "Unknown error" << std::endl;
        }
        exit(1);
    }
}

//主函数
int main(int argc, char *argv[]) {
    ALCdevice *device;
    ALCcontext *context;

    ALuint buffer, source;
    ALsizei size, freq;
    ALenum format;
    ALvoid *data;

    FILE *fp = NULL;

    fp = fopen(FILE_PATH, "rb");
    if (!fp) {
        std::cerr << "Error opening file '" << FILE_PATH << "'" << std::endl;
        return 1;
    }

    //获取打开音频流信息
    fseek(fp, 0, SEEK_END);
    size = ftell(fp);
    rewind(fp);
    data = malloc(size);
    fread(data, size, 1, fp);
    fclose(fp);

    //初始化OpenAL
    device = alcOpenDevice(NULL);
    if (!device) {
        std::cerr << "Error opening AL device" << std::endl;
        return 1;
    }
    context = alcCreateContext(device, NULL);
    alcMakeContextCurrent(context);

    //创建缓冲区并将音频数据添加到缓冲区中
    alGenBuffers(1, &buffer);
    alBufferData(buffer, AL_FORMAT_STEREO16, data, size, freq);

    //创建源并将缓冲区与其关联
    alGenSources(1, &source);
    alSourcei(source, AL_BUFFER, buffer);

    //播放源
    alSourcePlay(source);

    //暂停直到源完成播放
    ALint state;
    do {
        std::cout << "\r";
        alGetSourcei(source, AL_SOURCE_STATE, &state);
        std::cout << "Playing... " << std::flush;
    } while (state == AL_PLAYING);

    //清除数据并关闭AL设备
    alDeleteBuffers(1, &buffer);
    alDeleteSources(1, &source);
    alcDestroyContext(context);
    alcCloseDevice(device);

    return 0;
}
总结

在本文中,我们已经了解了如何使用C++和OpenAL创建一个简单的音乐程序。我们使用'Tu Hi Hai Aashiqui'歌曲来示范程序如何运行,并解释了代码的主要部分。现在,你可以尝试使用自己的歌曲并使用OpenAL库来创作出更复杂的音乐程序。