dia

Chess: India held to draw against Europe after securing first win at Online Nations Cup

India beat Rest of the World 2.5-1.5 in the seventh round of the Online Nations Chess Cup before drawing against Europe on Friday.




dia

Modi’s asked Indian firms to ‘be kind’ amid lockdown but many workers have not been paid their wages

At least three petitions have been filed in the Supreme Court demanding that companies be given the freedom to fire or furlough employees.




dia

Coronavirus: Two Indians flown back from Gulf to Kerala test positive

The Centre said it will now only test severe cases of the disease before releasing patients.




dia

What does the end of India’s Covid-19 lockdown mean for you?

The lockdown has not ‘killed’ the virus and was never going to. We will have to learn to live with Covid-19, possibly until 2022.




dia

The home giants: Time we stop scoffing at Indian cricket’s greatest strength

Most great teams build on a good home record and then take that confidence to the home of the opposition.




dia

Coronavirus: Cases in India will peak by July end, but will get better, says WHO envoy

David Nabarro said India has managed to keep the virus ‘reasonably well located in specific places’ by imposing timely restrictions.




dia

Watch: Bhogle on why Rohit replacing Kohli as India’s white-ball captain may not be a good idea

Rohit Sharma and Virat Kohli’s contrasting fortune as captains in the Indian Premier League has always raised doubts.




dia

Four years after bank defaulters flee India, SBI launches complaint against Delhi firm with CBI

The owners of Ram Dev International Limited are said to be missing since 2016 when an inspection was carried out by SBI.




dia

Indian companies are contributing lavishly to PM-CARES – even amid layoffs and pay cuts

The quasi-private relief fund does not stand up to scrutiny.




dia

Former Chhattisgarh CM Ajit Jogi suffers cardiac arrest, hospitalised

He has been put on ventilator support.




dia

Coronavirus: Senior India hockey players to undergo online coaching course amid lockdown

The course will be attended by 32 senior men and 23 senior women core probables on May 11 and 15 respectively.




dia

[ASAP] Two-temperature Collisional-radiative Modeling of Partially Ionized O<sub>2</sub>–Ar Mixtures over 8000–10,000 K Behind Reflected Shock Waves

The Journal of Physical Chemistry A
DOI: 10.1021/acs.jpca.0c00466




dia

COVID-19 Diary Week 3: I've Never Been More Emotionally Exhausted

After a week seeing cancer patients with COVID-19 as the inpatient consult attending, Don Dizon finds himself more emotionally exhausted than he's ever been before.
Medscape Oncology




dia

Legacy of the MacArthur Foundation’s Maternal Health Quality of Care Strategy in India

This report presents the findings from Mathematica’s cumulative review of the John D. and Catherine T. MacArthur Foundation’s Maternal Health Quality of Care (MHQoC) strategy in India.




dia

A Comparison of Cancer Stage at Diagnosis and Treatment Initiation Between Enrollees in an Urban HIV Clinic and SEER

A comparison of stage at cancer diagnosis and cancer treatment rates between people with HIV (PWH) and the general US population is needed to identify any disparities by HIV status.




dia

New Report Highlights the MacArthur Foundation’s Grantmaking Legacy to Advance Maternal Health in India

Mathematica released findings from its cumulative review of the John D. and Catherine T. MacArthur Foundation’s Maternal Health Quality of Care (MHQoC) strategy in India.




dia

Diane Rittenhouse Joins Mathematica as a Senior Fellow

Mathematica welcomes Diane Rittenhouse as senior fellow in the Health Unit. Rittenhouse, a family physician, is a nationally known expert at the intersection of social policy and clinical quality.




dia

Effects of Medicaid Expansion on Access, Treatment, and Outcomes for Patients with Acute Myocardial Infarction

Uninsured patients have decreased access to care, lower rates of percutaneous coronary intervention (PCI), and worse outcomes after acute myocardial infarction (AMI).




dia

Microbes and Enzymes in Soil Health and Bioremediation Ashok Kumar, Swati Sharma, editors

Online Resource




dia

Microbial biofilms in bioremediation and wastewater treatment / editors, Y.V. Nancharaiah, Biofouling and Biofilm Processes Section, Water and Steam Chemistry Division, Bhabha Atomic Research Centre, Kalpakkam, Tamil Nadu, India and Vayalam P. Venugopala

Online Resource




dia

This land is our land: the struggle for a new commonwealth / Jedediah Purdy

Dewey Library - HD205.P87 2019




dia

The soils of India Bipin B. Mishra, editors

Online Resource




dia

Diatoms: fundamentals and applications / edited by Joseph Seckbach and Richard Gordon

Barker Library - QK569.D54 D54 2019




dia

Ecology, conservation, and restoration of Chilika Lagoon, India C. Max Finlayson, Gurdeep Rastogi, Deepak R. Mishra, Ajit K. Pattnaik, editors

Online Resource




dia

Shareholder cities: land transformations along urban corridors in India / Sai Balakrishnan

Rotch Library - HD879.M444 B35 2019




dia

Wanderings of a naturalist in India, the western Himalayas, and Cashmere / Andrew Leith Adams

Rotch Library - QH183.A2 2018




dia

Commercial status of plant breeding in India Aparna Tiwari

Online Resource




dia

Museum Media


 

MUSEUM MEDIA Edited by Michelle Henning

Museum Media explores the contemporary uses of diverse media in museum contexts and discusses how technology is reinventing the museum. It considers how technological changes—from photography and television through to digital mobile media—have given rise to new habits, forms of attention and behaviors. It explores how research methods can be used to understand people's relationships with media technologies and



Read More...




dia

[ASAP] Plasmon-Mediated Coherent Superposition of Discrete Excitons under Strong Exciton–Plasmon Coupling in Few-Layer MoS<sub>2</sub> at Room Temperature

ACS Photonics
DOI: 10.1021/acsphotonics.0c00233




dia

[ASAP] Near-Field Radiative Heat Transfer between Dissimilar Materials Mediated by Coupled Surface Phonon- and Plasmon-Polaritons

ACS Photonics
DOI: 10.1021/acsphotonics.0c00404




dia

[ASAP] Colored Radiative Cooling Coatings with Nanoparticles

ACS Photonics
DOI: 10.1021/acsphotonics.0c00513




dia

[ASAP] Probing the Radiative Electromagnetic Local Density of States in Nanostructures with a Scanning Tunneling Microscope

ACS Photonics
DOI: 10.1021/acsphotonics.0c00264




dia

Building a Dictaphone Using Media Recorder and getUserMedia

Chris Mills brushes up his shorthand and shows how the MediaStream Recording API in modern browsers can be used to capture audio directly from the user’s device. Inching ever closer to the capabilities of native software, it truly is an exciting time to be a web developer.


The MediaStream Recording API makes it easy to record audio and/or video streams. When used with MediaDevices.getUserMedia(), it provides an easy way to record media from the user’s input devices and instantly use the result in web apps. This article shows how to use these technologies to create a fun dictaphone app.

A sample application: Web Dictaphone

To demonstrate basic usage of the MediaRecorder API, we have built a web-based dictaphone. It allows you to record snippets of audio and then play them back. It even gives you a visualisation of your device’s sound input, using the Web Audio API. We’ll just concentrate on the recording and playback functionality in this article, for brevity’s sake.

You can see this demo running live, or grab the source code on GitHub. This has pretty good support on modern desktop browsers, but pretty patchy support on mobile browsers currently.

Basic app setup

To grab the media stream we want to capture, we use getUserMedia(). We then use the MediaRecorder API to record the stream, and output each recorded snippet into the source of a generated <audio> element so it can be played back.

We’ll first declare some variables for the record and stop buttons, and the <article> that will contain the generated audio players:

const record = document.querySelector('.record');
const stop = document.querySelector('.stop');
const soundClips = document.querySelector('.sound-clips');

Next, we set up the basic getUserMedia structure:

if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
   console.log('getUserMedia supported.');
   navigator.mediaDevices.getUserMedia (
      // constraints - only audio needed for this app
      {
         audio: true
      })

      // Success callback
      .then(function(stream) {

      })

      // Error callback
      .catch(function(err) {
         console.log('The following `getUserMedia` error occured: ' + err);
      }
   );
} else {
   console.log('getUserMedia not supported on your browser!');
}

The whole thing is wrapped in a test that checks whether getUserMedia is supported before running anything else. Next, we call getUserMedia() and inside it define:

  • The constraints: Only audio is to be captured for our dictaphone.
  • The success callback: This code is run once the getUserMedia call has been completed successfully.
  • The error/failure callback: The code is run if the getUserMedia call fails for whatever reason.

Note: All of the code below is found inside the getUserMedia success callback in the finished version.

Capturing the media stream

Once getUserMedia has created a media stream successfully, you create a new Media Recorder instance with the MediaRecorder() constructor and pass it the stream directly. This is your entry point into using the MediaRecorder API — the stream is now ready to be captured into a <Blob>, in the default encoding format of your browser.

const mediaRecorder = new MediaRecorder(stream);

There are a series of methods available in the MediaRecorder interface that allow you to control recording of the media stream; in Web Dictaphone we just make use of two, and listen to some events. First of all, MediaRecorder.start() is used to start recording the stream once the record button is pressed:

record.onclick = function() {
  mediaRecorder.start();
  console.log(mediaRecorder.state);
  console.log("recorder started");
  record.style.background = "red";
  record.style.color = "black";
}

When the MediaRecorder is recording, the MediaRecorder.state property will return a value of “recording”.

As recording progresses, we need to collect the audio data. We register an event handler to do this using mediaRecorder.ondataavailable:

let chunks = [];

mediaRecorder.ondataavailable = function(e) {
  chunks.push(e.data);
}

Last, we use the MediaRecorder.stop() method to stop the recording when the stop button is pressed, and finalize the Blob ready for use somewhere else in our application.

stop.onclick = function() {
  mediaRecorder.stop();
  console.log(mediaRecorder.state);
  console.log("recorder stopped");
  record.style.background = "";
  record.style.color = "";
}

Note that the recording may also stop naturally if the media stream ends (e.g. if you were grabbing a song track and the track ended, or the user stopped sharing their microphone).

Grabbing and using the blob

When recording has stopped, the state property returns a value of “inactive”, and a stop event is fired. We register an event handler for this using mediaRecorder.onstop, and construct our blob there from all the chunks we have received:

mediaRecorder.onstop = function(e) {
  console.log("recorder stopped");

  const clipName = prompt('Enter a name for your sound clip');

  const clipContainer = document.createElement('article');
  const clipLabel = document.createElement('p');
  const audio = document.createElement('audio');
  const deleteButton = document.createElement('button');

  clipContainer.classList.add('clip');
  audio.setAttribute('controls', '');
  deleteButton.innerHTML = "Delete";
  clipLabel.innerHTML = clipName;

  clipContainer.appendChild(audio);
  clipContainer.appendChild(clipLabel);
  clipContainer.appendChild(deleteButton);
  soundClips.appendChild(clipContainer);

  const blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
  chunks = [];
  const audioURL = window.URL.createObjectURL(blob);
  audio.src = audioURL;

  deleteButton.onclick = function(e) {
    let evtTgt = e.target;
    evtTgt.parentNode.parentNode.removeChild(evtTgt.parentNode);
  }
}

Let’s go through the above code and look at what’s happening.

First, we display a prompt asking the user to name their clip.

Next, we create an HTML structure like the following, inserting it into our clip container, which is an <article> element.

<article class="clip">
  <audio controls></audio>
  <p>_your clip name_</p>
  <button>Delete</button>
</article>

After that, we create a combined Blob out of the recorded audio chunks, and create an object URL pointing to it, using window.URL.createObjectURL(blob). We then set the value of the <audio> element’s src attribute to the object URL, so that when the play button is pressed on the audio player, it will play the Blob.

Finally, we set an onclick handler on the delete button to be a function that deletes the whole clip HTML structure.

So that’s basically it — we have a rough and ready dictaphone. Have fun recording those Christmas jingles! As a reminder, you can find the source code, and see it running live, on the MDN GitHub.


This article is based on Using the MediaStream Recording API by Mozilla Contributors, and is licensed under CC-BY-SA 2.5.


About the author

Chris Mills manages the MDN web docs writers’ team at Mozilla, which involves spreadsheets, meetings, writing docs and demos about open web technologies, and occasional tech talks at conferences and universities. He used to work for Opera and W3C, and enjoys playing heavy metal drums and drinking good beer.

More articles by Chris




dia

FOOD MARKETING INSTITUTE v. ARGUS LEADER MEDIA. Decided 06/24/2019




dia

Faithful fighters: identity and power in the British Indian Army / Kate Imy

Dewey Library - UA668.I49 2019




dia

Me the people: how populism transforms democracy / Nadia Urbinati

Dewey Library - JC423.U776 2019




dia

The suspect: an Olympic bombing, the FBI, the media, and Richard Jewell, the man caught in the middle / Kent Alexander & Kevin Salwen

Dewey Library - HV8079.B62 A44 2019




dia

Rights and Security in India, Myanmar, and Thailand

Online Resource




dia

Congress and diaspora politics: the influence of ethnic and foreign lobbying / edited by James A. Thurber, Colton C. Campbell, and David A. Dulio

Dewey Library - JK1118.C58 2018




dia

Cambodia: return to authoritarianism / Kheang Un

Dewey Library - JC480.U54 2019




dia

Citizenship as a regime: Canadian and international perspectives / edited by Mireille Paquet, Nora Nagels, and Aude-Claire Fourot

Dewey Library - JF801.C58 2018




dia

Lord Cornwallis is dead: the struggle for democracy in the United States and India / Nico Slate

Dewey Library - JC423.G638 2019




dia

India's nuclear proliferation policy: the impact of secrecy on decision making, 1980-2010 / Gaurav Kampani

Dewey Library - UA840.K245 2020




dia

Pakistan violates ceasefire again, targets Indian posts in Rajouri

This is the 19th ceasefire violation by Pakistan in September alone, 97 such incidents this year.




dia

Sikkim sets up cell to monitor social media content

The move was made to counter any hate propaganda and rumors that may take place.




dia

Fodder Scam: Day before verdict, RJD prays, Lalu Yadav skirts media

The question of who would replace Lalu as RJD chief should he be convicted was not considered.




dia

Take Brand India to the world: Modi to admen, marketers

"India should try to inspire people rather than just impressing them," Modi said.




dia

Congress united in MP, CM candidate to be decided by Sonia: Jyotiraditya Scindia

"We will continue our efforts till we overthrow this corrupt government in MP"




dia

India committed to provide military equipment to Nepal

Military supplies had stopped in 2005 after deposed King Gynendra Shah assumed absolute powers.




dia

Pakistani troops violate LoC ceasefire, shell Indian posts

There have been 127 ceasefire violations by Pakistani troops along LoC this year.