Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alexei Frounze                       2:5020/400     29 May 2001  22:46:11
 To : Mihail Beliakoff
 Subject : WAV to SPEAKER ?!?!?!?!?!?!?
 -------------------------------------------------------------------------------- 
 
 Tue May 29 2001 09:04, Mihail Beliakoff wrote to All:
 
  MB> Hужен алгоpитм, чтобы выводить WAV-файл на динамик компьютеpа.
  MB> Т.е. как pаботает пpогpамма PLAYWAVE от SYMAANTEC ???
  MB> Или адpесок где можно найти подобную инфоpмацию.
 
 алгоритм простой, поищи в инете объяснение широтно имппульсной модуляции (ШИМ)
 или на инглише Pulse Width Duration.
 есть у меня и пример, только мне было лень много писать для такой безделушки.
 предполагается, что процессор - пень, система - ДОС/винды (не NT и не 2000),
 файлик моно, 8-ми битный, частота сэмплов 11025Гц.
 Компилять NASM'ом (http://www.cryogen.com/nasm/):
   nasm spk.asm -o spk.com
 запускать с параметром - именем файла.
 пока не забыл... воспроизводит максимум около 60кб, если файл длиннее - всё не
 услышишь, только часть.
 
 bits 16
 org 100h
 
 main:
         mov     bx, 81h
         cmp     byte [bx], 0dh
         jz      .eopen
 
 0:
         cmp     byte [bx], 0dh
         jz      .1
         inc     bx
         jmp     short .0
 1:
         mov     byte [bx], 0
 
         mov     ax, 3d00h
         mov     dx, 82h
         int     21h
         jc      .eopen
 
         mov     bx, ax
         mov     cx, 0ff00h
         sub     cx, samples
         mov     ah, 3fh
         mov     dx, samples
         int     21h
         jc      .eread
 
         mov     [size], ax
 
         mov     ah, 3eh
         int     21h
 
         jmp     .loaded
 eopen:
 eread:
         mov     dx, merr
         mov     ah, 9
         int     21h
         ret
 loaded:
 
         call    get_cpu_freq
         mov     ebx, 11025
         div     ebx
         mov     edi, eax
 
         in      al, 61h
         and     al, 0fch
         out     61h, al
 
         cld
         mov     si, samples
         mov     bp, [size]
 
 cycle:
 
         or      al, 2
         out     61h, al
 
         push    ax
         xor     eax, eax
         lodsb
 
 ;;;; start of amplifying
 sub ax, 80h
 shl ax, 3
 cmp ax, -80h
 jge .2
 mov ax, -80h
 jmp short .3
 2:
 cmp ax, 7fh
 jle .3
 mov ax, 7fh
 3
 add ax, 80h
 ;;;; end of amplifying (remove this stuff if too loud)
 
         mul     edi
         shrd    eax, edx, 8
         mov     ecx, eax
         call    delay
         pop     ax
 
         and     al, ~2
         out     61h, al
 
         push    ax
         sub     ecx, edi
         neg     ecx
         call    delay
         pop     ax
 
         dec     bp
         jnz     .cycle
 
         ret
 
 delay:
         push    ecx
         rdtsc
         add     eax, ecx
         adc     edx, 0
         mov     ebx, eax
         mov     ecx, edx
 0:
         rdtsc
         sub     eax, ebx
         sbb     edx, ecx
         jc .0
         pop     ecx
         ret
 
 get_cpu_freq:
 push byte 40h
 pop es
 
 mov ch, 9 ; 9 values for average of 8 periods
 0:
 mov ax, [es:6ch]
 1:
 cmp ax, [es:6ch]
 je .1
 rdtsc
 push edx
 push eax
 dec ch
 jnz .0
 
 mov cx, 800h
 xor eax, eax ; allocate cl:eax for the sum
 pop ebx
 pop edx
 2:
 pop esi
 pop edi
 sub ebx, esi
 sbb edx, edi
 add eax, ebx
 adc cl, dl
 mov ebx, esi
 mov edx, edi
 dec ch
 jnz .2
 
 ; cl:eax = total sum of 8 values
 shrd eax, ecx, 3 ; eax = average value
 
 mov ebx, 1193180
 mul ebx
 shrd eax, edx, 16
 shr edx, 16
 
 ret
 
 size    dw      1
 
 merr    db      "couldn't open or read a file",13,10,"$"
 
 samples:
 
 http://alexfru.chat.ru
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 WAV to SPEAKER ?!?!?!?!?!?!?   Mihail Beliakoff   29 May 2001 09:04:57 
 Re: WAV to SPEAKER ?!?!?!?!?!?!?   Andrew Kadatch   29 May 2001 09:42:09 
 WAV to SPEAKER ?!?!?!?!?!?!?   Michail Svarichevsky   29 May 2001 15:02:26 
 WAV to SPEAKER ?!?!?!?!?!?!?   Wowa Savin   30 May 2001 20:32:06 
 WAV to SPEAKER ?!?!?!?!?!?!?   Alexei Frounze   29 May 2001 22:46:11 
 WAV to SPEAKER ?!?!?!?!?!?!?   Wowa Savin   01 Jun 2001 11:13:27 
Архивное /ru.algorithms/16679d7c2ff4b.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional