Roman Black Sound (btc)


Closed Thread
Results 1 to 40 of 58

Hybrid View

  1. #1
    Join Date
    Feb 2008
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    Hi again Darrel and thanks for the welcome! In fairness I never work with PICBASIC so you probably won't be seeing much of me here. My main reason for searching forums was to get some feedback on the new release of BTc Encoder 2.0 and get some user examples to link to on my web page. I develop commercial hardware and software so my web page has always been sorely neglected, just a few "hobby" style doodads. I am looking at improving it with some of the voluminous work i've done over the last few years.

    I'll add your suggestion of outputiing BTc sound data as a DW table to my list of things to do. There are a few people getting back to me with suggestions for the new BTc Encoder so I have a feeling that in a few weeks v2.0 will become super v2.1 ha ha!

    Please feel free to contact me by email (or publicly here) if you need anything re the re-creation of your BTc player.

  2. #2
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Cool btc Player re-creation

    Ok, "Dog ate my homework" might have been a "Good thing".

    Here's a simple "btc Player" that can use any bitrate/btc model.
    It has an easy IMPORT function that embeds the sound in the program data.
    There are 2 "PLAY" functions. PlaySound, and RepeatSound.

    I've changed the format of the ASM files, so this won't be very useful without modifications to the btc encoder. Or an external program can be used to convert the existing ASM/btc files to the new format. I've knocked up a simple program to do that here, but it's really, really ugly. Works for me, but it would be a nightmare for anyone else.

    The new ASM format looks like this ...
    Code:
    ; Simulated output for DT's suggestion to Roman Black
    
    btc_bitrate  = 22050       ; Playback Bitrate
    btc_length   = 4270        ; Sound Length in bytes
    btc_btc      = 64          ; bt Constant
    btc_model    = 1           ; btc model (0=1bit 1=1.5bit)
    btc_wordbits = 16          ; 8=retlw, 14=16F's, 16 for 18F
    ;---------------------------------------------------------
        DB  0xB5,0x6A,0xAA,0x52,0xCA,0xA9,0x4B,0x35,0xAD,0xB6,0xB5,0x9A,0xDB,0x56,0xAA,0xAA
        DB  0xB5,0x55,0x52,0x52,0x52,0x12,0x42,0x20,0x84,0x52,0x99,0x6B,0x5A,0xEE,0xF6,0xF7
        DB  0xBB,0xB7,0x75,0xAC,0xA9,0x14,0x52,0x89,0x25,0x28,0xA9,0x4C,0xA5,0x2A,0x52,0xAA
        ; etc.
    This format allows you to easily Import sound files like this ...
    Code:
    INCLUDE "DT_RBSound.pbp"
    
    @    ImportSound  Space, "SpaceNew.asm"
    @    ImportSound  Bang, "Bang1New.asm"
    Each Import line specifies the "Name" to call the sound in the program (Space, Bang), and the associated sound file to load.

    Then to play the sound, you simply ...
    Code:
    @     PlaySound Bang
    @     RepeatSound Space, 3
    <hr>
    This is a test program that plays a few sounds from a space game, and a line from kirk and spock.

    I've just taken the filtered output from the PIC and fed it into the Line-in of my laptop.
    I think the input is loading down the filter, as it sounds much better when I plug it directly into the sound input of my Viewsonic monitor. An op-amp buffer would probably help.

    Here is the recorded sound from the example.
    http://www.pbpgroup.com/files/picout.mp3

    Code:
    ;-- Target = 18F --
    @   __CONFIG    _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
    DEFINE OSC 10
    
    btc_Pin1  VAR PORTC.2
    btc_Pin2  VAR PORTC.3
    X         VAR BYTE
    Y         VAR BYTE
    LATE_LED  VAR PORTC.5
    
    INCLUDE "DT_RBSound.pbp"
    
    @    ImportSound  Space, "SpaceNew.asm"
    @    ImportSound  Bang, "Bang1New.asm"
    @    ImportSound  Hit, "HitNew.asm"
    @    ImportSound  Shoot, "ShootNew.asm"
    @    ImportSound  Fascinating, "FascinatingNew.asm"
    @    ImportSound  Kirk, "BeamUpNew.asm"
    @    ImportSound  BigGun, "RazorNew.asm"
    
    
    T1CON = 0
    
    Main:
        high LATE_LED
        pause 500
        low LATE_LED
        FOR Y = 1 to 2
            FOR X = 1 to 2
                @ PlaySound BigGun
                Pause 500
            NEXT X
            @ PlaySound Shoot
            Pause 500
        NEXT Y
        @ PlaySound Hit
        Pause 500
        @ RepeatSound Hit,10
        Pause 1000
        @ RepeatSound Shoot, 4
        @ RepeatSound BigGun, 2
        pause 1000
        @ RepeatSound Space, 3
        @ PlaySound Bang
        Pause 500
        @ PlaySound Kirk
        Pause 1000
        @ PlaySound Fascinating
    goto Main
    There are still many things that can be done with it, like having a background sound using interrupts. Playing "segments" of a sound file, and probably many more. But for a quick re-creation, it turned out pretty good.

    The zip file contains the module, demo program and all the sound files needed to compile it.
    <br>
    Attached Files Attached Files
    DT

  3. #3
    Join Date
    Nov 2005
    Posts
    36


    Did you find this post helpful? Yes | No

    Default

    Would be nice have a 14bit core version.
    Regards
    Gianni

  4. #4
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Yup!

    Had that in mind with ...
    Code:
    btc_wordbits = 14          ; 8=retlw, 14=16F's, 16 for 18F
    Although it would have to be encoded as 2, 7-bit bytes packed in a 14-bit word with "DA".

    If Roman has a way to convert it, I got a way to play it.
    errr, I'll have a way to play it. (soon)
    <br>
    DT

  5. #5
    Join Date
    Feb 2008
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    Wow Darrel! You don't mess around hey? You did that so quick and quite neat and professional too. Maybe I should start coding in basic!

    Just a couple of things;

    1. The code you posted on this page does not include the actual routines that play the sound; PlaySound and RepeatSound. I did find them in the "DT_RBSound.pbp" file that was included in the .ZIP file you posted here. So no drama, I was just confused for a minute how your code worked.

    2. I'm having trouble understanding the format of your stored data! Can you please walk me through the following line;

    Code:
    btc_wordbits = 16          ; 8=retlw, 14=16F's, 16 for 18F
    ;---------------------------------------------------------
        DB  0xF8,0x1F,0x80,0xFE,0x01,0xE0,0x3F,0xF8,0x01,0xFF,0x80,0x1F,0xE0,0xDA,0xA9,0x03
        DB  0xFF,0xC0,0x0F,0xFC,0x01,0xFE,0x06,0x55,0xB5,0xA0,0x3F,0xE0,0x1F,0xC1,0x2D,0xFA
    I assume your DB table is BYTES of sound data as converted from my orig .asm "retlw" syntax?

    So what is the difference between 8/14/16 as in your comment? What do I need to code up as export options for BTc Encoder??

    Maybe the btc_wordbits var might be more beginner friendly as "PIC_core_type" var of 14 or 16 for 14bit core PIC and 16bit core PIC respectively?

    Anyway I'm very impressed with what you have put together so quickly and I will link to it on my web page when you are happy that it is all done etc.

  6. #6
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by THE_RB View Post
    Wow Darrel! You don't mess around hey? You did that so quick and quite neat and professional too. Maybe I should start coding in basic!
    Maybe you should.

    But having done it before, made it real easy to do again.
    The first time took much longer, but this one turned out better. "Good Dog".

    So what is the difference between 8/14/16 as in your comment? What do I need to code up as export options for BTc Encoder??

    Maybe the btc_wordbits var might be more beginner friendly as "PIC_core_type" var of 14 or 16 for 14bit core PIC and 16bit core PIC respectively?
    That's what I started with too, (PIC_type) but then I realized it wasn't really dependant on the Core.
    • An 18F would be able to play files encoded with any of the 3 formats. Although 16-bit data is the most efficient, using the least amount of flash.
    • Many 16F's will be able to play either the retlw or 14-bit encodings. It depends on whether that PIC can read it's own flash or not.
    • For the 16F PIC's that can't access their flash, you're stuck with retlw. But frankly, those PIC's are so small, they wouldn't be able to hold more than a quick "Ding-Dong" sound. Or maybe just the "Ding".
    And that's why I went with btc_wordbits. To reflect the number or bits per word, without giving people the impression you had to use 1 specific type depending on the chip you have. Sound encoded with 14-bit can still run just fine on an 18F.

    Umm, now I'm getting more confused! With .asm data tables in 14bit core pics they still only store 8 bits (as a "retlw" instruction). Unless you have a different system in mind?
    I DO!

    There are a couple ways to do the 14-bit encoding, using the MPASM opcodes DA or DW. You end up with the same thing either way.

    With DA, it takes two 7-bit numbers and packs them into a single 14-bit Word.
    If you were to convert 8-bit data to a 14-bit packed stream, it might look something like this ...
    Code:
    btc_wordbits = 16          ; 8=retlw, 14=16F's, 16 for 18F
    ;---------------------------------------------------------
        DB  0xB5,0x6A,0xAA,0x52,0xCA,0xA9,0x4B,0x35,0xAD,0xB6,0xB5,0x9A,0xDB,0x56,0xAA,0xAA
    
      0xB5  = 1011010 1      ; Shift Right 1 and save the LSB
            = 0x5A
              
      0x6A  = 1011010 10     ; Rotate extra bit into next value
                             ; Then shift right again for only 7-bits
            = 0x5A
    
      0xAA  = 1010101 010    ; Rotate 2 in, and 3 out
            = 0x55
    
      0x52  = 0100101 0010   ; 3 In, 4 out
            = 0x25
    
          This continues on for another 3 bytes.
          Every 7-bytes, there's an extra byte, and no extra bit's.
          Then you can put the data in a "DA" statement which packs each 2 bytes in a 14-bit word.
    
    btc_wordbits = 14          ; 8=retlw, 14=16F's, 16 for 18F
    ;---------------------------------------------------------
       DA  0x5A,0x5A,0x55,0x25,...
    Of course, since you may have the data in a binary stream in your encoder.
    You may just need to take 7-bits at a time, and put them in Bytes.

    Using DW is very similar, except you break the data into 14-bit words, instead of 7-bit bytes.
    Then you can make the data like this.
    Code:
    btc_wordbits = 14          ; 8=retlw, 14=16F's, 16 for 18F
    ;---------------------------------------------------------
        DW  0x2D5A,0x2AA5, ...
    And just a quick note on the retlw format.
    All those ORG statements make it impossible to use with PBP because those addresses are occupied by PBP's System Library.
    The problems of Locating the data, and Page switching if it crosses a boundary can be handled in the software. But the data should be allowed to go anywhere in the PIC. Not at predetermined addresses. So there's no real need to have the ORG's in there.

    Anyway I'm very impressed with what you have put together so quickly and I will link to it on my web page when you are happy that it is all done etc.
    And I am impressed with the quality of the sound with such small encoded btc files.
    So we're even.

    While this program is currently written for PBP. The same thing can be made to work in straight ASM too.
    So not only will you get a PicBasic version, you'll get a new ASM one too.

    Once we have it all working, I'll optimize it down to ASM, which should speed it up a bit. Right now it putters out on 44100bps unless using 20mhz crystal or higher. It should be able to play 44100 with a 4mhz crystal, but that'll come later.

    Thanks alot for all your effort. And please take your time.
    I'm sure we both have other things to attend too as well.
    But if you have questions, don't wait.

    Best regards,
    DT

  7. #7
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    Roman. Very nice utility you have there. Nice work. I was totally surprised when I ran Darrels' example, and it sounded as good as it did. Way impressive.

    Darrel. I'm always impressed with your macros. I'm really surprised I don't see more of the #V option used in Microchip macro examples. That ImportSound macro was really impressive work. I would have to call that one "art". You just don't see this. Even in some of the more advanced code examples from engineers that work for Mchip.

    You really should write more articles on using built-in PBP macros & using various MPASM macro options. Honestly.

    I also like your use of the EXT option with PBP. Timer1 VAR WORD EXT is really cool, as long as some newbie doesn't setup an 18F part for a 16-bit R/W timer..;o}

    This project has some very serious potential. Background sounds with ints is a major hint. I would bet this could even beat something like the SpeakJet with a little more work.

    I'm looking forward to seeing where this one lands for sure..;o}
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  8. #8
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default

    Yes, thank you. I have all the files that Alain posted here. I do not have the 1.6 meg file he mentions, but I am sure that he will send it. ADPCM has me intrigued, so thanks again for your code.

    Walter
    http://www.scalerobotics.com

  9. #9
    Join Date
    Feb 2008
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Darrel Taylor View Post
    Yup!

    Had that in mind with ...
    Code:
    btc_wordbits = 14          ; 8=retlw, 14=16F's, 16 for 18F
    Although it would have to be encoded as 2, 7-bit bytes packed in a 14-bit word with "DA".

    If Roman has a way to convert it, I got a way to play it.
    errr, I'll have a way to play it. (soon)
    <br>
    Umm, now I'm getting more confused! With .asm data tables in 14bit core pics they still only store 8 bits (as a "retlw" instruction). Unless you have a different system in mind?

  10. #10
    Join Date
    Dec 2006
    Location
    Brasil, Sao Paulo, Campinas
    Posts
    54


    Did you find this post helpful? Yes | No

    Default Re: btc Player re-creation

    Darrel,
    I was reading your article on Wiki and decided to test it. I have a proto hardwares done (18F452 + 4MHZ cristal) and I would like very much to use this tool with my circuits. Firstlly I want to understand better some things.
    I tested using RB_Sound Folder files (TestRBSound.pbp, DT_RBSound.pbp and the asm files like HitNew.asm, FascinatingNew.asm...)
    in the TestRBSound.pbp is assigned:
    btc_Pin1 - PORTC.2
    btc_Pin2 - PORTC.3
    LATE_LED - PORTC.5
    well, I wired a led to the PortC.5. It is done
    What I need to do with btc_Pin1 and btc_Pin2. How to wire and where?
    ...others files (Number folder) into the .asm files has a draw:
    Digital label + resistor R = 25968 ohms and a 0.22uF capacitor to the ground and Analogue label on junction. Need I to put a speeker here or a buzzer? Or is necessary to use a pre-amplifier? Do you used the BTc.exe (BTC Sound Encoder from Roman Black)? I teste it using a Ding.wav from windows and exported to a ding.asm, but into the files is diferent comparing with your files...Into the one.asm for example you coment "File converted to .BSM format with the freeware btc_convertor by Darrel Taylos...Is it other converter diferent of the BTC Soundd Encoder?

    Well...
    Then I decided to wire a 26k resistor to portc.2 and a 0.22uF capacitor like the draw, and puted a buzzer on junction only to test. The portC.3 NC.
    I compiled with sucess but it don't worked!
    The led blink just one time and nothing occur.
    I don't know what I need to use, if a buzzer, a speeker, a amplifier, how to wire it with certainly but the led should to blink basead on program!
    Then I alterate the program to blink 5 times, and then the led blinked 5 times but after it stoped again...I percever the after @ PlaySound BigGun line, nothing occur (led always low, buzzer low)
    If you can help me to use it I would be very happy.
    I really apreciate it and woul like to use in my projects

  11. #11
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default Throw me a bone....

    Is it just me, or is anyone else having problems finding Norms code? Might be a firewall issue, I can click on the attachement, but I can't download it: http://www.protonbasic.co.uk/forum/a...1&d=1169530365 When I click on it IE says "Done" but I have a blank screen. And when I look on protons NEW site, i don't see any attachements, which does seem kind of strange. I became a member of their new forum, just in case only members could view attachements. Maybe I have to wait a little while?

    In any case, thanks Norm! Very interesting work. I look forward to seing your proton code ... but not sure when I will be allowed to. Maybe when I get home to a less restrictive firewall I will have better luck.
    Last edited by ScaleRobotics; - 14th August 2010 at 19:12.
    http://www.scalerobotics.com

  12. #12
    Join Date
    Oct 2004
    Posts
    440


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by scalerobotics View Post
    Is it just me, or is anyone else having problems finding Norms code? Might be a firewall issue, I can click on the attachement, but I can't download it: http://www.protonbasic.co.uk/forum/a...1&d=1169530365 When I click on it IE says "Done" but I have a blank screen. And when I look on protons NEW site, i don't see any attachements, which does seem kind of strange. I became a member of their new forum, just in case only members could view attachements. Maybe I have to wait a little while?

    In any case, thanks Norm! Very interesting work. I look forward to seing your proton code ... but not sure when I will be allowed to. Maybe when I get home to a less restrictive firewall I will have better luck.
    I'll update my website to include all the files.

    The ADPCM basic code was ported from the full C ADPCM code.

    Norm
    Last edited by Normnet; - 14th August 2010 at 19:46.

  13. #13
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Normnet View Post
    The ADPCM basic code was ported from the full C ADPCM code.
    Ooooh! That sounds fantastic. I have some reading to do.

    Uh..., yes, that does help a lot, thank you Alain! Thankfully, I am permitted to view them and download them as well! Grrrr to Corporate, Proton, or me. Not sure who to blame, but I will start with myself.

    Thanks again Norm and Alain.

    Walter
    http://www.scalerobotics.com

  14. #14
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,616


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by scalerobotics View Post
    Ooooh! That sounds fantastic. I have some reading to do.

    Walter
    No luck , the WavPlayer explanations are too big ... 1.6 Mb.

    I can post it to you @ your private mailbox ...

    Alain
    Last edited by Acetronics2; - 14th August 2010 at 21:19.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  15. #15
    Join Date
    Oct 2004
    Posts
    440


    Did you find this post helpful? Yes | No

    Default

    Walter

    Do you have the files?

    Norm

  16. #16
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,616


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by scalerobotics View Post
    Is it just me, or is anyone else having problems finding Norms code? Might be a firewall issue, .
    Hi, Walter

    Lol ...

    But ... would this help ???

    Alain
    Attached Images Attached Images
    Attached Files Attached Files
    Last edited by Acetronics2; - 14th August 2010 at 20:07.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

Similar Threads

  1. Delayed output 10 secs
    By lilimike in forum mel PIC BASIC Pro
    Replies: 37
    Last Post: - 14th October 2011, 06:28
  2. new to PIC programming could really do with some help
    By karenhornby in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 5th March 2008, 14:03
  3. Help with sound command in 2 programs
    By hyperboarder in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 5th July 2007, 20:36
  4. Sound and sound control with minimal parts
    By bartman in forum General
    Replies: 23
    Last Post: - 18th January 2005, 14:08
  5. Re: quick fix for sound command?
    By Melanie in forum Code Examples
    Replies: 0
    Last Post: - 9th July 2004, 01:44

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts