purebasic.info

PureBasic forum
Текущее время: Ср июл 18, 2018 7:31 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: несилен ли кто в Visual Studio 6?
СообщениеДобавлено: Пн июл 24, 2017 4:04 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1638
Откуда: Алматы
Благодарил (а): 14 раз.
Поблагодарили: 45 раз.
Пункты репутации: 5
есть исходники библиотеки, которая рожает звук - типа эмулирует чип YM2612. затык в том, что в ней как минимум 2 ошибки.

первая:
при инициализации чипа можно указать количество чипов, сколько мне нужно. в оригинале там 6 каналов. но предположим я хочу использовать 12 - то можно указать:
OpenOPNDriver(2)
и по идее оно должно дать такую возможность использовать два чипа... но вместо этого происходит некое увеличение частоты чипа, то есть звуки становятся по тону выше. и чем больше ставишь это количество чипов - тем выше по тону звук. как бы это исправить?

вторая:
для проигрывания wav сэмплов была запилена функция PlayDACSample. проблема в том, что если в сэмпле в начале файла была тишина скажем секунду или две - PlayDACSample теряет интерес к этому файлу и перестает его играть. или громкость выкручивает в ноль. вот как бы ей втолковать чтоб играла четко по размеру сэмпла, а не по наличию тишины в этом сэмпле.

скачать:
http://www.emu-land.net/forum/index.php ... ach=185238

там приложено еще два ехешника с моим импортом этой длл. один случай когда чип 1 штука - эталон - так и должно играть. второй - установлены 2 штуки и явно слышно разницу в звучании. так-же в первом ехе есть две кнопкни снизу: одна запускает обычный сэмпл, когда данные сразу в начале файла. второй сэмпл с паузой в секунду или две тишины в начале. из-за чего проигрывания останавливается. это для теста библиотеки.

вот если кто знает как исправить эти два момента - будьте любезны отпишите :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: несилен ли кто в Visual Studio 6?
СообщениеДобавлено: Ср июл 26, 2017 1:20 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Исправить перекомпилив либу,она похожа на си или с++ .
Вот нужно только копаться и разбираться в функциях вами указанных,к примеру во второй вызываются также другие :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
void OPNAPI PlayDACSample(UINT8 ChipID, UINT32 DataSize, const UINT8* Data, UINT32 SmplFreq)
{
        DAC_STATE* TempDAC;
       
        if (ChipID >= OPN_CHIPS)
                return;
       
        EnterCriticalSection(&write_sect);
       
        TempDAC = &DACState[ChipID];
        TempDAC->DataSize = DataSize;
        TempDAC->Data = Data;
        if (SmplFreq)
                TempDAC->Frequency = SmplFreq;
        TempDAC->Delta = MulDivRoundU(0x10000, TempDAC->Frequency, SampleRate);
        TempDAC->SmplPos = 0x00;
       
        // Resume Stream
        NullSamples = 0;
        PauseStream(false);
        LeaveCriticalSection(&write_sect);
       
        return;
}
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: несилен ли кто в Visual Studio 6?
СообщениеДобавлено: Ср июл 26, 2017 2:58 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1638
Откуда: Алматы
Благодарил (а): 14 раз.
Поблагодарили: 45 раз.
Пункты репутации: 5
ну это то да - я вроде нашел. в функции
void FillBuffer(WAVE_16BS* Buffer, UINT32 BufferSize)

закомментил строки:
Цитата:
if (NullSamples >= SampleRate)
{
//NullSamples = 0xFFFFFFFF;
//PauseStream(true); // stop the stream if chip isn't used
}


правда как это скажется на производительности еще не ясно. получается она раньше работала как: какое-то движение по звуку есть - трансляция работает. движения нет - отрубается. сейчас получается есть движение\нету - трансляция пашет все равно.

хотя я думаю вывести PauseStream отдельной командой для библиотеки и управлять ей вручную. правда это не точно будет, так как у меня нет четкого маркера когда сэмпл уже закончил проигрывать. могу лишь только предполагать. максимальный размер сэмпла 65к. минимальная частота 5500 чтоль. выходит примерно 11 секунд. то есть врубать этот PauseStream(true) через 11 секунд, если нет движения.


а вот со второй проблемой не ясно. смотрел этот код... как баран на новые ворота... смотрел - не ясно. вроде бы есть команда:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SetOPNOptions(OutSmplRate.l, ResmplMode.l, ChipSmplMode.l, ChipSmplRate.l)
 
;' Resampling Modes
;Const OPT_RSMPL_HIGH As Byte = &H0      ' high quality linear resampling [default]
;Const OPT_RSMPL_LQ_DOWN As Byte = &H1   ' low quality downsampling, high quality upsampling
;Const OPT_RSMPL_LOW As Byte = &H2       ' low quality resampling
;
;' Chip Sample Rate Modes
;Const OPT_CSMPL_NATIVE As Byte = &H0    ' native chip sample rate [default]
;Const OPT_CSMPL_HIGHEST As Byte = &H1   ' highest sample rate (native or custom)
;Const OPT_CSMPL_CUSTOM As Byte = &H2    ' custom sample rate
 
не совсем ясно что она делает...
SetOPNOptions(44100, 0, 0, 0) при одном чипе нормально. при двух завышение.
SetOPNOptions(88200, 0, 0, 0) при двух чипах вроде бы нормально по скорости проигрывания, но по моему гораздо громче. и выбивает. где-то там с памятью косяк в библиотеке.
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: несилен ли кто в Visual Studio 6?
СообщениеДобавлено: Ср июл 26, 2017 9:47 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
PauseStream по логике предполагает паузу а не завершение проигрывания,думаю что то надо другое.
Копайся в функции проигрывания,как она завершает его? :roll:


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB