Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> openal играет только в одну сторону 
:(
    Опции темы
admsasha
Дата 10.3.2012, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Использую openAL для вывода звука. Но проблема в том что под windows звук исходит только из одной колонки (с левой). Но под Linux такой проблемы нет. Возможно разные умолчания

Вот строки отвечающие за проигрывания

Инициализация
Код


    ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
    ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
    ALfloat ListenerOri[] = { 0.0, 0.0, -1.0,  0.0, 1.0, 0.0 };
    ALfloat mPos[] = { 0.0, 0.0, 2.0 };


    // Устанавливаем параметры слушателя
    alListenerfv(AL_POSITION,    ListenerPos);
    alListenerfv(AL_VELOCITY,    ListenerVel);
    alListenerfv(AL_ORIENTATION, ListenerOri);



    ALenum error;
    for (int i=1;i<7;i++){
        buffer[i] = alutCreateBufferFromFile (sound_file[i].c_str());
        if (buffer[i] == AL_NONE){
            error = alutGetError ();
            fprintf (stderr, "openAL: Error loading file: '%s'\n",alutGetErrorString (error));
        }


        alGenSources (i, &source[i]);
        alSourcei (source[i], AL_BUFFER, buffer[i]);

        alSourcef (source[i], AL_PITCH,    1.0f);
        alSourcef (source[i], AL_GAIN,    1.0f);
        alSourcefv(source[i], AL_POSITION,  mPos);
        alSourcefv(source[i], AL_VELOCITY,  ListenerVel);

    }



проигрывание
Код

    // громкость звука
    alSourcef(source[nBuf], AL_GAIN, sound_volume);
    alSourcePlay (source[nBuf]);



Что не так указал ?

PM MAIL WWW ICQ Jabber   Вверх
admsasha
Дата 11.3.2012, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Вот весь тестовый листинг. В windows звук только с левого уха. В Linux всё нормально. Проверял на нескольких компьютерах (и разных колонках). Эффект везде один. Не пойму что не так.

Код

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <AL/alut.h>

/*
 * This program loads and plays a variety of files.
 */

static void
playFile (const char *fileName)
{
  ALuint buffer;
  ALuint source;
  ALenum error;
  ALint status;

  /* Create an AL buffer from the given sound file. */
  buffer = alutCreateBufferFromFile (fileName);
  if (buffer == AL_NONE)
    {
      error = alutGetError ();
      fprintf (stderr, "Error loading file: '%s'\n",
               alutGetErrorString (error));
      alutExit ();
      exit (EXIT_FAILURE);
    }

  /* Generate a single source, attach the buffer to it and start playing. */
  alGenSources (1, &source);
  alSourcei (source, AL_BUFFER, buffer);
  alSourcePlay (source);

  /* Normally nothing should go wrong above, but one never knows... */
  error = alGetError ();
  if (error != ALUT_ERROR_NO_ERROR)
    {
      fprintf (stderr, "%s\n", alGetString (error));
      alutExit ();
      exit (EXIT_FAILURE);
    }

  /* Check every 0.1 seconds if the sound is still playing. */
  do
    {
      alutSleep (0.1f);
      alGetSourcei (source, AL_SOURCE_STATE, &status);
    }
  while (status == AL_PLAYING);
}

int
main (int argc, char **argv)
{
  /* Initialise ALUT and eat any ALUT-specific commandline flags. */
  if (!alutInit (&argc, argv))
    {
      ALenum error = alutGetError ();
      fprintf (stderr, "%s\n", alutGetErrorString (error));
      exit (EXIT_FAILURE);
    }

  /* Check for correct usage. */
  if (argc != 2)
    {
      fprintf (stderr, "usage: playfile <fileName>\n");
      alutExit ();
      exit (EXIT_FAILURE);
    }

  /* If everything is OK, play the sound file and exit when finished. */
  playFile (argv[1]);

  if (!alutExit ())
    {
      ALenum error = alutGetError ();
      fprintf (stderr, "%s\n", alutGetErrorString (error));
      exit (EXIT_FAILURE);
    }
  return EXIT_SUCCESS;
}


PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.