I created android application that able to draw wave from input sound( real time).It works very well on the first test in Xcode So I try it on android but it doesnt work.
maybe this is problem about android microphone ?
pls help
thanks
I created android application that able to draw wave from input sound( real time).It works very well on the first test in Xcode So I try it on android but it doesnt work.
maybe this is problem about android microphone ?
pls help
thanks
Can you be clearer on "Doesn't Work", please?
Did you add permission for your app to access the mic?
Does it crash? {Did you include Native support?}
It can draw wave normally when i run simulation in Xcode , but it can't draw any wave in Android Phone .
I think that's even less clear than your original message!
You need to ask better questions if you want people to help - it's impossible for anyone to know what's going on if you're so vague.
sorry for my vague . i will try better .
It doesn't have any crash problem , and i don't sure about mic permission ( im so new with this ).
but here is my code ...
ps. drawwave is new object from wavedisplay class that will auto draw wave from mic .
MainContentComponent::MainContentComponent()
{
setSize (600, 400);
addAndMakeVisible(drawwave);
if(deviceManager== nullptr){
deviceManager = new AudioDeviceManager();
deviceManager->initialise(2, 2, NULL , true);
}
deviceManager->addAudioCallback (&wave);
}
MainContentComponent::~MainContentComponent()
{
deviceManager->removeAudioCallback (&wave);
}
void MainContentComponent::paint (Graphics& g)
{
g.fillAll (Colour (0xff001F36));
g.setFont (Font (16.0f));
g.setColour (Colours::white);
// g.drawText ("FinalProject V.0.2", getLocalBounds(), Justification::centred, true);
}
void MainContentComponent::resized()
{
Rectangle<int> area (getLocalBounds());
drawwave.setBounds (area.removeFromTop (80).reduced (8));
}
here is code from wavedisplay class
class WaveDisplay : public Component,
public AudioIODeviceCallback,
private Timer
{
public:
WaveDisplay()
: nextSample (0), subSample (0), accumulator (0)
{
setOpaque (true);
clear();
startTimerHz (75); // use a timer to keep repainting this component
}
//==============================================================================
void audioDeviceAboutToStart (AudioIODevice*) override
{
clear();
}
void audioDeviceStopped() override
{
clear();
}
void audioDeviceIOCallback (const float** inputChannelData, int numInputChannels,
float** outputChannelData, int numOutputChannels,
int numSamples) override
{
for (int i = 0; i < numSamples; ++i)
{
float inputSample = 0;
for (int chan = 0; chan < numInputChannels; ++chan)
if (inputChannelData[chan] != nullptr)
inputSample += std::abs (inputChannelData[chan][i]); // find the sum of all the channels
pushSample (10.0f * inputSample); // boost the level to make it more easily visible.
}
// We need to clear the output buffers before returning, in case they're full of junk..
for (int j = 0; j < numOutputChannels; ++j)
if (outputChannelData[j] != nullptr)
zeromem (outputChannelData[j], sizeof (float) * (size_t) numSamples);
}
private:
float samples[1024];
int nextSample, subSample;
float accumulator;
void clear()
{
zeromem (samples, sizeof (samples));
accumulator = 0;
subSample = 0;
}
void paint (Graphics& g) override
{
g.fillAll (Colours::black);
const float midY = getHeight() * 0.5f;
int samplesAgo = (nextSample + numElementsInArray (samples) - 1);
RectangleList<float> waveform;
waveform.ensureStorageAllocated ((int) numElementsInArray (samples));
for (int x = jmin (getWidth(), (int) numElementsInArray (samples)); --x >= 0;)
{
const float sampleSize = midY * samples [samplesAgo-- % numElementsInArray (samples)];
waveform.addWithoutMerging (Rectangle<float> ((float) x, midY - sampleSize, 1.0f, sampleSize * 2.0f));
}
g.setColour (Colours::lightgreen);
g.fillRectList (waveform);
}
void timerCallback() override
{
repaint();
}
void pushSample (const float newSample)
{
accumulator += newSample;
if (subSample == 0)
{
const int inputSamplesPerPixel = 200;
samples[nextSample] = accumulator / inputSamplesPerPixel;
nextSample = (nextSample + 1) % numElementsInArray (samples);
subSample = inputSamplesPerPixel;
accumulator = 0;
}
else
{
--subSample;
}
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WaveDisplay);
};
I'll ignore the code for the moment - Have you tried to build the demo app for Android, and do the Audio demos work OK?
Especially, see the Android part of the Introjucer project, where it has a check-box for Audio Input Required...
Check your own app has that box checked...
oh wow . thanks a lot .
works so great !
Hi,
When I build and open the demo in android studio and download into my smartphone, everything seems to work fine but audio suff, the app is automatically restarted everytime I select any audio feature in the (left column) menu: Audio:FilePayback/LatencyDetector/Recording/Synthesisers/MIdi
Is it because the demo code is not supported for Android?I would like to record and play audio. O please tell me an example to start with.
Thanks in advance.
Regards
Carlos
No problems like that on our devices here.. Which android device/OS version have you got?
Hi!
I am using Android version 4.2.2 (Smartphone is BQ Aquaris).
I downloaded the last projuce version and compiling with VS2015, I installed API17 to run the app on this Android version.
Regards
Carlos
[EDITED]. I forgot to enable the "Audio Record permission in the manifest" field!!It works flawless now!! ![]()
I have found out now that, when I turn the smartphone around (vertical/horizontal or viceversa) the demo application is restarted and the welcome menu selected, and it stops recording or whatever the demo was doing.
We fixed this a few days ago - pull the latest version.
Ohh, great!
What a coincidence!-
Regards
FORGET, it is also resolved in JUCE4.1 ;D
I didn't know if opening a new post, but it is a simple question
I have realised, when an app is running in android, when either "home" button (exit to desktop), or the ONOFF button (sleep mode?? - the screen turns black) the application is also restarted....is there any option to avoid that and keep the app running??
Regards
Carlos
No.. I think you're at the mercy of the OS in terms of stopping/starting the app.