Giter Club home page Giter Club logo

talkie's Introduction

Speech library for Arduino

Badge License: GPLv3     Badge Version     Badge Commits since latest     Badge Build Status     Badge Hit Counter

Stand With Ukraine

Available as Arduino library "Talkie".

Button Install     Button Changelog


The original version can be found [here](https://github.com/going-digital/Talkie).
A good explanation of the TMS5220 operation and the LPC frame format can be found [here](https://github.com/mamedev/mame/blob/master/src/devices/sound/tms5220.txt).

If you find this library useful, please give it a star.

🌎 Google Translate


YouTube Videos

Demonstration of Talkie voltmeter example Intoduction by Gadget Reboot
Demonstration of Talkie voltmeter example Intoduction by Gadget Reboot

Improvements to the original and to the non blocking version of PaulStoffregen

  • Improved code so Talkie now runs on 8 MHz Arduino (with millis() interrupt disabled while talking).
  • Fixed the ISR_RATIO Bug for plain Arduino.
  • Added utility functions sayQNumber(), sayQFloat(), sayQVoltageMilliVolts() extracted from the examples.
  • Inverted output at pin 11 is enabled by default to increase volume for direct attached piezo or speaker.
  • Added comments and did refactoring to better understand the functionality.
  • Added compatibility to Arduino Tone library by stopping timer1 interrupts at every end of speech.
  • Extracted initializeHardware() and terminateHardware() functions for easy adapting to other platforms.
  • Currently supporting:
    • ATmega328 as found on the Uno and Nano boards.
    • ATmega2560 as found on the MEGA 2560 board.
    • ATmega32U4 as found on the Leonardo and CircuitPlaygound boards.
    • ARM M0 (Tested for Arduino Zero) as found on the SAMD, Teensy and Particle boards.
    • ESP32. ESP8266 is theoretical possible using FRC2, but for now Arduino shares the FRC1 timer between interrupts and PWM.
    • ARM M3 (Tested for BluePill) for Roger Clarks as well as STM core.

Pin and timer mapping table for different platforms

Platform Pin normal Pin inverted 8kHz timer PWM timer Remarks
AVR (Uno and Nano) Pin 3 Pin 11 timer1 timer2
ATmega2560 Pin 6/PH3 Pin 7/PH4 timer1 timer4
Leonardo Pin 9/PB5 Pin 10/PB6 timer1 timer4
ProMicro Pin 5/PC6 % timer1 timer4
Esplora Pin 6/PD7 % timer1 timer4
Zero (SAMD) A0 % TC5 DAC0
ESP32 Pin 25 % hw_timer_t DAC0
BluePill Pin 3 % timer3 analogWrite Roger Clarks core
BluePill PA3 % timer4 analogWrite STM core
Teensy Pin 12/14721 % IntervalTimer analogWrite

Timer usage

Timer 1 (Servo timer) is used at all ATmegas for updating voice output data at 8 kHz.
Timer 2 (Tone timer) on ATmega328 (62500 Hz / 16 µs) or Timer 4 on ATmega2560 + ATmega32U4 (5 µs) is used to generate the 8 bit PWM output.
Both timers are therefore not available for other libraries / purposes, like servo control or tone output.

Differences between BluePill cores

There are two cores for the BluePill.

Generation of the high speed PWM is complicated for Roger Clark core and easy for the STM core. Program size for VoltmeterSayQ.cpp is 21 kByte for Roger Clark core and 32 kByte for STM core. The 8 kHz interrupt handling requires 8 µs for Roger Clark core and 12 µs for STM core.


Hints

  • As default both inverted and not inverted outputs are enabled to increase volume if speaker is attached between them.
  • The library uses Timer 1 and Timer 2 on ATmega328, so libraries like Tone, Servo, analogWrite(), and some other libraries cannot be used while speaking.
  • After a call to say...() you can use tone() again.
  • using [Sloeber]ervo write() after a call to say... you must detach() and attach() the servo before first write() in order to initialize the timer again for Servo.
  • If you want to use SPI functions on ATmega328 while Talkie is speaking, then disable Talkies usage of pin 11 by Talkie Voice(true, false); instead of Talkie Voice; or Voice.doNotUseInvertedOutput();.
  • Porting to ATtinys is not possible, since they lack the hardware multiplication. ( Believe me, I tried it! )
  • I use the speakers from old earphones or headphones, which have approximately 16 to 32 Ω, directly without a series resistor on my ATmegas. The headphone speaker tend to be much louder, especially when they stay in their original housings. If you do not connect the speaker between non inverted and inverted output, you must use a series capacitor of 1 to 10 uF do block the DC current. Look for the right polarity. The AC current is proportional to the rectance of the speaker, not its resistance in Ω, and it is between 10 and 40 mA. The latter is definitely out of specification for ATmegas but quite loud -what you hear is what you supply- and running for hours on my desk. If you are not sure, just use a piezo speaker or a power amplifier.

Predefined vocabulary

The predefined vocabulary can be found in the Vocab_*.h files, especially in Vocab_US_Large.h.

Own vocabulary

To create LPC data you can use the python_wizard like described here or the BlueWizard for Mac OS X.

Another way to create LPC data is to use Qboxpro, an unsupported old Windows application running under XP, which can produce Talkie compatible data streams. The missing BWCC.DLL (Borland Windows Custom Control Library) can be found e.g. here. The process is described here and goes like this:

  • Create a new project using the following project parameters : byte / 8 KHz / 5220 coding table
  • Goto Project and add the audio file
  • Choose process using : medium bit rate and pressing OK
  • Edit concatenation : insert concatenation after by adding a name; then insert phrase and press OK
  • Format it by choosing the first line in the format menu : LPC 10V, 4UV

OUTPUT FILTER

C to avoid clicks | Low pass 1600Hz
                   _____
  D3 >-----||-----|_____|-----+-----> to Power amplifier
         100nF      10k       |
                             ---
                             --- 10 nF
                              |
                             _|_ GND

Compile options / macros for this library

To customize the software to different requirements, there are some compile options / macros available.
Modify them by enabling / disabling them, or change the values if applicable.

Name Default value File Description
NO_COMPATIBILITY_FOR_TONE_LIB_REQUIRED disabled Talkie.h If you do not use the Arduino Tone library, then activating can save up to 844 bytes program size.
FAST_8BIT_MODE disabled Talkie.h If defined we use 8bit instead of 16 bit coefficients K1 and K2. This saves 10 microseconds (40 instead of 50 us) for a 16 MHz ATmega and has almost the same quality, except of a few "dropouts" e.g. in the word "thousand".

Changing include (*.h) files with Arduino IDE

First, use Sketch > Show Sketch Folder (Ctrl+K).
If you have not yet saved the example as your own sketch, then you are instantly in the right library folder.
Otherwise you have to navigate to the parallel libraries folder and select the library you want to access.
In both cases the library source and include files are located in the libraries src directory.
The modification must be renewed for each new library version!

Modifying compile options / macros with PlatformIO

If you are using PlatformIO, you can define the macros in the platformio.ini file with build_flags = -D MACRO_NAME or build_flags = -D MACRO_NAME=macroValue.

Modifying compile options / macros with Sloeber IDE

If you are using Sloeber as your IDE, you can easily define global symbols with Properties > Arduino > CompileOptions.
Sloeber settings

Schematic for voltmeter example

Fritzing schematic for voltmeter example

Revision History

Version 1.3.2

  • Fixed ESP32 timer bug.

Version 1.3.1

  • Updated _1_Voltmeter example and renamed example names.
  • Improved SAMD support.

Version 1.3.0

  • Removed blocking wait for ATmega32U4 Serial in examples.
  • 10 bit Coefficients are working now, but they do not sound better 😞.
  • Tested on an ESP32.
  • Tested on a BluePill.

Version 1.2.0

  • Corrected wrong function name doNotUseUseInvertedOutput().
  • Added functions digitalWriteNonInvertedOutput() and digitalWriteInvertedOutput().

Version 1.1.0

  • SAMD support.
  • ESP32 support.
  • Teensy support.
  • Version number.
  • Renamed *.c to *.cpp files.
  • Added function sayQTimeout() in TalkieUtils.cpp.
  • Added example USDistanceToVoice.
  • Added function sayQVoltageVolts().
  • Improved end handling to minimize clicks.

Version 1.0.2

  • ATmega2560 supported and tested
  • Always set pins to input when finishing, to avoid a click.

Version 1.0.1

  • Added SPI compatibility by not resetting pin 11 to input if SPI is detected
  • Added new constructor Talkie(bool aUseNonInvertedOutputPin, bool aUseInvertedOutputPin);

Version 1.0.0

  • Initial Arduino library version

CI

The library examples are tested with GitHub Actions for the following boards:

  • arduino:avr:uno
  • arduino:avr:leonardo
  • arduino:avr:mega
  • arduino:sam:arduino_due_x
  • esp8266:esp8266:huzzah:eesz=4M3M,xtal=80
  • esp32:esp32:featheresp32:FlashFreq=80
  • STMicroelectronics:stm32:GenF1:pnum=BLUEPILL_F103C8

talkie's People

Contributors

arminjo avatar bouviervj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

talkie's Issues

no output using teensy 3.2

version 1.0.2 (1.0.3 not released?) gives no output. tried changing pin declaration manually without effect.
the original library from paul stoffregen works fine, on pin A14 (DAC).
i'd be glad if this library could work as a drop-in-replacement. thank you!

Clicking at end of word

I've capacitively coupled the output to an amp and I'm getting a click at the end of each word, is there a way to suppress this, i'm linked against version 1.02.

Thanks again.

[Bug]:

The type of board you are using.

Arduino ATmega32U4 board (Leonardo, etc.)

What IDE are you using?

Arduino Pro IDE

Example(s) you have checked while hunting the bug.

  • Demo_Toms_Diner
  • Getting_Started
  • TalkieVocabularyDemo
  • USDistanceToVoice
  • Voltmeter
  • VoltmeterSayQ
  • Other - please specify below

Example(s) to reproduce the issue.

  • Demo_Toms_Diner
  • Getting_Started
  • TalkieVocabularyDemo
  • USDistanceToVoice
  • Voltmeter
  • VoltmeterSayQ
  • Other - please specify below

The library version you are working with.

What are the steps to reproduce this issue?

  1. See error

What happens?

1

The serial output which indicates the error happened.

No response

What were you expecting to happen?

No response

Additional context

No response

[Bug]: demo toms diner: harsh sound

The type of board you are using.

Arduino ATmega328* board (UNO, Nano, etc.)

What IDE are you using?

Arduino IDE

Example(s) you have checked while hunting the bug.

  • Demo_Toms_Diner
  • Getting_Started
  • TalkieVocabularyDemo
  • USDistanceToVoice
  • Voltmeter
  • VoltmeterSayQ
  • Other - please specify below
  • I checked, if at least one of the examples was working.

Example(s) to reproduce the issue.

  • Demo_Toms_Diner
  • Getting_Started
  • TalkieVocabularyDemo
  • USDistanceToVoice
  • Voltmeter
  • VoltmeterSayQ
  • Other - please specify below

The library version you are working with.

What are the steps to reproduce this issue?

Playing this sample with this circuit
grafik

What happens?

95 % of the time it sounds clear, but occasionally — and always at the same time — it sounds absolutely harsh.

The serial output which indicates the error happened.

No response

What were you expecting to happen?

clear sound as in the getting started demo

Additional context

No response

Final checklist for the bug report.

  • I have read the README.md file thoroughly
  • I have browsed the examples for one, that matches my use case.
  • The title of the issue is helpful and relevant.

update for Mega 2560

This library works well with Uno, but it seems not good for Mega.
Please port it, for it's use seems to be more interesting for big projects.

Thanks.

List of words in talkie library

Hi, can you give me the content, or send me a link to get the list of words in talkie lib that can be used in program? beside some words in the examples, i don't know which word can be used.
thanks

DEBUG and ESP32 Don't appear to be working

I've installed the library, added a #Define ESP32 and DEBUG, compiled and loaded the code to my HelTec ESP32. I get no display at the console for the info I'd expect (based on the ccp file) and I get no sound at all out of pin 25 (or 26 for that matter if I change the ccp file Pin). Is there some magical incantation I need? Or am I just missing something?

ESP32 - Crashes after first word

Originally posted by addelovein February 3, 2023
I hear the first word (LOW) Since i have bno amplifier...

Connected 3.3v - 26
Speaker to GND and 25

After first Say:

[ 1559][E][esp32-hal-cpu.c:110] addApbChangeCallback(): duplicate func=0x400d27d8 arg=0x3ffbdb6c
E (1544) timer_group: timer_isr_callback_add(236): register interrupt service failed

Use regular PWM on Teensy

Hey,

I'm trying to make this library play nice with the Teensy Audio library, which I have set up to use the DAC on my Teensy 3.2.

It's not especially clear to me how I initialise Talkie to stay away from that pin and use a regular old PWM pin. I can use beginPWM(), but it also seems that initializeHardware()which runs before anything it output (I think?) is eager to use the DAC anyway.

Is there a way to do this?

(Ideally, I'd mix the Talkie output into the Teensy Audio library, but that's a bridge I'll cross another day)

Compatibility with ATmega4809

Arduino Nano Every has 16 Bit Timers (5 actually) and its more "powerful" than ATmega32u4 (16mhz vs 20mhz). And works on 32u4...

is there any way to make it work on the 4809?

Error compiling

Hi
Have you tested Talkie library and Newping? its not working with me.
I working on code to read ultrasonic sensor value and convert the distance to output sound.
any idea on mega 2560

Thanks.

Cannot compile sketches with Talkie when using Arduino ESP32 Core v3

The type of board you are using.

ESP32 board

What IDE are you using?

Arduino IDE

Example(s) you have checked while hunting the bug.

  • Demo_Toms_Diner
  • Getting_Started
  • TalkieVocabularyDemo
  • USDistanceToVoice
  • Voltmeter
  • VoltmeterSayQ
  • Other - please specify below
  • I checked, if at least one of the examples was working.

Example(s) to reproduce the issue.

  • Demo_Toms_Diner
  • Getting_Started
  • TalkieVocabularyDemo
  • USDistanceToVoice
  • Voltmeter
  • VoltmeterSayQ
  • Other - please specify below

The library version you are working with.

What are the steps to reproduce this issue?

Preconditions:

  1. Arduino IDE 2.3.2
  2. ESP32 Core API v. 3.0.2 installed
  3. Talkie Library installed

Steps:

  1. Create new sketch with any of the demo examples from Talkie (only 2 were necessary).
  2. Verify the sketch

Results:
Compilation fails.

What happens?

Compilation errors are reported for several functions that different signature or are just non-existing.

The serial output which indicates the error happened.

/Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp: In member function 'void Talkie::initializeHardware()':
/Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp:326:44: error: too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'
  326 |         sTalkieSampleRateTimer = timerBegin(1, APB_FREQUENCY_DIVIDER, true);
      |                                  ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /Users/username/Library/Arduino15/packages/esp32/hardware/esp32/3.0.2/cores/esp32/esp32-hal.h:84,
                 from /Users/username/Library/Arduino15/packages/esp32/hardware/esp32/3.0.2/cores/esp32/Arduino.h:36,
                 from /Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp:78:
/Users/username/Library/Arduino15/packages/esp32/hardware/esp32/3.0.2/cores/esp32/esp32-hal-timer.h:35:13: note: declared here
   35 | hw_timer_t *timerBegin(uint32_t frequency);
      |             ^~~~~~~~~~
/Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp:327:29: error: too many arguments to function 'void timerAttachInterrupt(hw_timer_t*, void (*)())'
  327 |         timerAttachInterrupt(sTalkieSampleRateTimer, timerInterrupt, true);
      |         ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/username/Library/Arduino15/packages/esp32/hardware/esp32/3.0.2/cores/esp32/esp32-hal-timer.h:50:6: note: declared here
   50 | void timerAttachInterrupt(hw_timer_t *timer, void (*userFunc)(void));
      |      ^~~~~~~~~~~~~~~~~~~~
/Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp:328:9: error: 'timerAlarmWrite' was not declared in this scope; did you mean 'timerWrite'?
  328 |         timerAlarmWrite(sTalkieSampleRateTimer, (getApbFrequency() / APB_FREQUENCY_DIVIDER) / SAMPLE_RATE, true);
      |         ^~~~~~~~~~~~~~~
      |         timerWrite
/Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp:330:5: error: 'timerAlarmEnable' was not declared in this scope; did you mean 'timerAlarm'?
  330 |     timerAlarmEnable(sTalkieSampleRateTimer);
      |     ^~~~~~~~~~~~~~~~
      |     timerAlarm
/Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp: In member function 'void Talkie::terminateHardware()':
/Users/username/Documents/Arduino/libraries/Talkie/src/Talkie.cpp:449:9: error: 'timerAlarmDisable' was not declared in this scope
  449 |         timerAlarmDisable(sTalkieSampleRateTimer);
      |         ^~~~~~~~~~~~~~~~~

exit status 1

Compilation error: exit status 1

What were you expecting to happen?

Successful compilation, no errors.

Additional context.

The samples were compiled successfully after downgrading to ESP32 Core v 2.0.17 in Arduino IDE boards manager.

ESP32 Core API v.3.0.2 has removed or modified several functions used by Talkie, as seen in ESP's documentation: Migration from 2.x to 3.0
Additional info can be found here: 3.0.0 version Migration related issues

Final checklist for the bug report.

  • I have read the README.md file thoroughly
  • I have browsed the examples for one, that matches my use case.
  • The title of the issue is helpful and relevant.

Compiling on Arduino MKR 1010 WIFI giving Error

`
Arduino: 1.8.15 (Windows Store 1.8.49.0) (Windows 10), Board: "Arduino MKR WiFi 1010"

Documents\Arduino\libraries\Talkie\src\Talkie.cpp: In constructor 'Talkie::Talkie()':

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:281:17: error: 'DAC0' was not declared in this scope

#define DAC_PIN DAC0 // pin 14/A0 for Zero. PA02 + DAC1 on due
\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:457:28: note: in expansion of macro 'DAC_PIN'
NonInvertedOutputPin = DAC_PIN; // initialize with DAC pin

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:281:17: note: suggested alternative: 'PAC0'

#define DAC_PIN DAC0 // pin 14/A0 for Zero. PA02 + DAC1 on due

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:457:28: note: in expansion of macro 'DAC_PIN'

 NonInvertedOutputPin = DAC_PIN; // initialize with DAC pin

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp: In constructor 'Talkie::Talkie(bool, bool)':

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:281:17: error: 'DAC0' was not declared in this scope

#define DAC_PIN DAC0 // pin 14/A0 for Zero. PA02 + DAC1 on due

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:470:32: note: in expansion of macro 'DAC_PIN'

     NonInvertedOutputPin = DAC_PIN; // initialize with DAC pin

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:281:17: note: suggested alternative: 'PAC0'

#define DAC_PIN DAC0 // pin 14/A0 for Zero. PA02 + DAC1 on due

\Documents\Arduino\libraries\Talkie\src\Talkie.cpp:470:32: note: in expansion of macro 'DAC_PIN'

     NonInvertedOutputPin = DAC_PIN; // initialize with DAC pin

exit status 1

Error compiling for board Arduino MKR WiFi 1010.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
`

How do I make the program dynamic

I have been trying to use this library and make it dynamic. What I'm trying to do is receive data from another arduino, say the keyword DANGER, and pass it through the in-built function voice.say(). I do understand that the voice.say() accepts uint_8t datatype. Any help is greatly appreciated.

Where to change code for Mega2560

This Talkie software looks very promising to me.

On compiling with IDE and for a Mega2560, this error appears: Error compiling for board Arduino Mega or Mega 2560

The code says: ATmega2560: non inverted at pin 6, inverted at pin 7

Question: where in the code do the changes go?

Thank you

Terrible advice

I use the speakers from old earphones or headphones, which have approximately 16 to 32 Ohm, directly without a series resistor.

In other words, "how to destroy your Arduino".

Distorted and drops first consonant

Talkie is distorted and drops first consonant using Adafruit Feather M0.
Sounds like: DANGER DANGER _ED ALERT _OTOR IS SON FIRE

I wonder if the code gets out of the 'synthPeriod' state too early, but I don't see how to prove it?

void timerInterrupt()
...
    if (synthPeriod) {
        ...
    } else {
        // Unvoiced source. Use random bit generator / white noise
        ...
    }

If you will look at it, I will buy and send you an Adafruit Feather M0.

Thank you for your work.

PWM on 328p timer0

Can I still use analogWrite on a 328p (nano) whilst using Talkie if I use a timer0 pwm pin?

Thanks.

talkie and Tone wont load in same sketch

Armin .Fantastic work - & you read my mind .
I want to use Talkie and tone or Pitch to have words and music on a project (Im re using an old super simon game and I want it to make music and talk ) .
I am using chinese clone UNO and NANO
I tried this :
#include <Arduino.h>
// #include <TalkieLPC.h>
#include <Vocab_US_Acorn.h>
#include <Vocab_US_Large.h>
#include <Vocab_US_TI99.h>
#include <Talkie.h>
#include <Vocab_Special.h>
#include <digitalWriteFast.h>
#include <Vocab_US_Clock.h>
#include <TalkieUtils.h>
#include <Vocab_Toms_Diner.h>
#include <Vocab_Soundbites.h>

#include "Tone.h"

I got this error
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer0_pin_port'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer0_pin_mask'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer1_pin_port'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer1_pin_mask'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer2_pin_port'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer2_pin_mask'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer0_toggle_count'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer1_toggle_count'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of timer2_toggle_count'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
Tone.cpp.o (symbol from plugin): In function timer0_pin_port': (.text+0x0): multiple definition of __vector_7'
libraries/Tone/Tone.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino Uno.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.