Board.KolibriOS.org

Official KolibriOS board
It is currently Tue May 21, 2019 5:59 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 26 posts ]  Go to page Previous 1 2
Author Message
PostPosted: Tue Apr 24, 2012 4:12 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Если собираешься делать кольцевой буфер посмотри исходники Doom s_sound.c.


Top
   
PostPosted: Tue Apr 24, 2012 5:20 pm 
Спасибо! Попробую, если потоковый не справится.


Top
   
PostPosted: Tue Apr 24, 2012 7:42 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Mario! Если не секрет, что Вы задумали ?

Каюс - невнимательно читал :( :

Цитата:"для воспроизведения отдельных семплов-букв (в синтезаторе речи) "


Top
   
PostPosted: Tue Apr 24, 2012 8:15 pm 
Я же маргинал и злодей, потому задумал очередное черное дело.


Top
   
PostPosted: Wed Apr 25, 2012 9:13 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Вот это я понимаю !.. :mrgreen:


Top
   
PostPosted: Sat Jun 16, 2012 11:37 pm 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 794
Обновил документацию на вики http://wiki.kolibrios.org/wiki/Sound/ru


Top
   
PostPosted: Sun Dec 28, 2014 4:50 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Это был долгий вечер...

Следствием установлено:
1) В режиме PCM_RING нельзя инициализировать звуковую подсистему в одном потоке и вызывать воспроизведение в другом, даже если они в одном адресном пространстве и один является родителем для другого - ф.68.14 будет ждать очень долго...
Spoiler: Show
Image

2) В режиме PCM_RING не корректно воспроизводятся сэмплы с частотой ниже 44100, т.е. 22050 и ниже. Особенно сильно проявляется на 8 бит и 1 канал.
Spoiler: Show
Image

В режиме PCM_OUT такого сроду не было...
Spoiler: Show
Image

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Dec 28, 2014 7:49 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario_r4
1. Это и к остальным типам относится. Буфер привязан к контексту потока. Использование в другом контексте не рекомендуется.
2.В Doom 11КГц стерео 16 бит выводится корректно. Скорее всего ты неправильно создаёшь буфер. Надо сразу указывать формат звука.


Top
   
PostPosted: Sun Dec 28, 2014 10:08 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
2.В Doom 11КГц стерео 16 бит выводится корректно. Скорее всего ты неправильно создаёшь буфер. Надо сразу указывать формат звука.

Зато 8 КГц моно выводится "трелью".

Укажи пожалуйста где я создаю неправильно буфер:
Spoiler: Show
Code:
snd_background_music_thread_start:
   mov   eax,[background_music]
   mov   [wav_for_test],eax
   mov   ebx,eax
   add   ebx,1024
   mov   [wav_for_test_end],ebx
   call   initialize_sound_system
;--------------------------------------
.1:
   cmp   [music_flag],1
   je   .start
   
   mcall   5,50
   mcall   68,1
   jmp   snd_background_music_thread_start.1
;--------------------------------------      
.start:
   stdcall _PlayBuffer@8, [hBuff1], 0
   cmp   eax,-1
   je   snd_play_buffer_fail
   
;   DEBUGF   1, "Play Buffer successful EAX: %x\n",eax
;--------------------------------------      
.start_1:
   mov   eax,[background_music]
; check for correct data_offset
   push   eax
   add   eax,[data_offset]   
   sub   eax,4
   cmp   [eax],dword 'data'
   pop   eax
   je   @f

   mov   [wav_for_test],eax
   mov   ebx,eax
   add   ebx,1024
   mov   [wav_for_test_end],ebx
   call   find_data_offset
   cmp   [sound_flag],0
   jz   snd_background_music_thread_start.1   ;.exit
;--------------------------------------
@@:
   add   eax,[data_offset]
   mov   ebx,[eax]
   add   eax,4
   mov   ebp,eax
   add   ebx,eax
;   DEBUGF   1, "start EAX: %x\n",eax
;--------------------------------------
.loop:   
   cmp   [music_flag],0
   jne   @f

   stdcall _StopBuffer@4, [hBuff1]
;   DEBUGF   1, "Stop Buffer EAX: %x\n",eax
   jmp   snd_background_music_thread_start.1
;--------------------------------------
@@:
; get event data from the driver
;   DEBUGF   1, "Get driver_notify_struct \n"
   push   ebx
   mcall   68,14,hBuff1_driver_notify_struct
   pop   ebx
;   DEBUGF   1, "Check to code \n"   
; проверка на code
   cmp   [hBuff1_driver_notify_struct], dword 0xFF000001
   jne    @b
;   DEBUGF   1, "Check to stream \n"   
; проверка на stream
   mov   eax,[hBuff1_driver_notify_struct+8]
   cmp   eax,[hBuff1]
   jne   @b
;   DEBUGF   1, "Get buffer_offset \n"
; получить смещение в буффере
   mov   eax,[hBuff1_driver_notify_struct+12]
   mov   [hBuff1_buffer_offset],eax

;   DEBUGF   1, "src EBP: %x size EBX: %x\n",ebp,ebx
   stdcall _SetBuffer@16, [hBuff1], ebp, [hBuff1_buffer_offset], [hBuff1_buffer_size]   
   cmp   eax,-1
   je   snd_set_buffer_fail
   
;   DEBUGF   1, "Set Buffer successful EAX: %x\n",eax
   
;   add   ebp,8192*2
   add   ebp,[hBuff1_buffer_size]
   add   ebp,[hBuff1_buffer_size]
   cmp   ebx,ebp
   jbe   .start_1
   
;   sub   ebp,8192
   sub   ebp,[hBuff1_buffer_size]
   jmp   .loop
;------------------------------------------------------------------------------
initialize_sound_system:
   mov   [sound_flag],1

   stdcall   _InitSound@4,version
   cmp   eax,-1
   je   snd_init_fail
   
;   DEBUGF   1, "Sound init successful %x\n",eax
   mov   eax,[version]
   and   eax,0xffff
   cmp   eax,SOUND_VERSION
   jne   snd_version_fail

;   DEBUGF   1, "Sound version successful %x\n",eax

   stdcall   _test_wav@4,dword [wav_for_test]   ;letter_1a
   test   eax,eax
   jz   snd_test_wav_fail
   
;   or   eax,PCM_OUT
   or   eax,PCM_RING
   mov   [snd_format],eax

;   DEBUGF   1, "Test wav successful %x\n",eax

   call   find_data_offset
   
   mov   al,[sound_flag]
   test   al,al
   jz   .exit
;--------------------------------------   
   stdcall   _CreateBuffer@12,[snd_format],0,hBuff1
   cmp   eax,-1
   je   snd_create_buffer_fail
   
;   DEBUGF   1, "Create Buffer 1 successful %x\n",eax

   stdcall   _GetBufferSize@8,[hBuff1],hBuff1_buffer_size
   
   cmp   eax,-1
   je   snd_get_buffer_size_fail
   
;   DEBUGF   1, "Get Buffer 1 size successful size: %x\n",[hBuff1_buffer_size]
   
   mov   ecx,[hBuff1_buffer_size]
   shr   ecx,1
   mov   [hBuff1_buffer_size],ecx
;--------------------------------------
.exit:
   ret
;------------------------------------------------------------------------------
find_data_offset:
   mov   esi,[wav_for_test]
;--------------------------------------
@@:
   cmp   [esi],dword 'data'
   je   @f

   inc   esi
   cmp   esi,[wav_for_test_end]
   jne   @b
   
;   DEBUGF   1, "find data offset fail\n"
   mov   [sound_flag],0
   ret
;--------------------------------------
@@:
   sub   esi,[wav_for_test]
   add   esi,4
   mov   [data_offset],esi
   ret
;------------------------------------------------------------------------------

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Dec 28, 2014 3:57 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
На первый взгляд всё правильно. Одну ошибку в драйвере я исправил. Страдали 8-ми битные моно с частотой меньше 24КГц и 8-ми битные стерео с частотой меньше 12 КГц.


Top
   
PostPosted: Sun Dec 28, 2014 4:48 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Ну, вот. Помнится FPLAY тоже был идеален, пока не был исправлен. :wink:
Спасибо за оперативный фикс.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 26 posts ]  Go to page Previous 1 2

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited