2019 International Conference on Theoretical and Applicative Aspects of Computer Science (ICTAACS) [electronic journal].
2019 International Conference on Electrical and Computing Technologies and Applications (ICECTA) [electronic journal].
2019 IEEE International Conference on Integrated Circuits, Technologies and Applications (ICTA) [electronic journal].
2019 IEEE 31st International Conference on Tools with Artificial Intelligence (ICTAI) [electronic journal].
2019 12th International Conference on Intelligent Computation Technology and Automation (ICICTA) [electronic journal].
2012 IEEE 24th International Conference on Tools with Artificial Intelligence (ICTAI 2012) [electronic journal].
2011 International Conference on Intelligent Computation Technology and Automation (ICICTA) [electronic journal].
[ASAP] Charge and Electrical Double Layer Formation in a Nonpolar Solvent Using a Nonionic Surfactant
[ASAP] Microcompression Method for Determining the Size-Dependent Elastic Properties of PMMA Microcapsules Containing <italic toggle="yes">n</italic>-Octadecane
[ASAP] Role of Alcohol as a Cosurfactant at the Brine–Oil Interface under a Typical Reservoir Condition
[ASAP] Competitive Interactions at Electrolyte/Octanol Interfaces: A Molecular Perspective
[ASAP] Synthesis and Characterization of a Chromo-Extractant to the Probe Liquid–Liquid Interface in a Solvent Extraction Process
Structured fluids: polymers, culloids, surfactants / Thomas A. Witten, Philip A. Pincus
Rhamnolipid biosurfactant: recent trends in production and application / Rajesh Kumar, Amar Jyoti Das
Biobased surfactants and detergents: synthesis, properties, and applications / editors, Douglas G. Hayes [and others]
Hydrophobic tail length in spin crossover active iron(II) complexes predictably tunes T½ in solution and enables surface immobilisation
DOI: 10.1039/C9QI01478K, Research Article
Linear correlation of the hydrophobic alkyl tail length R employed in [FeII(LH-OR)(NCBH3)2] with the spin crossover switching temperature is a very convenient method of predictably tuning the iron(II) spin state.
To cite this article before page numbers are assigned, use the DOI form of citation above.
The content of this RSS Feed (c) The Royal Society of Chemistry
Aerobic Oxidation Catalyzed by Polyoxometalates Associated to an Artificial Reductase at Room Temperature and in Water
DOI: 10.1039/D0QI00442A, Research Article
Four polyoxometalates (POMs) were combined with an artificial reductase based on polyethyleneimine (PEI) and flavin mononucleotide (FMN) which is capable of delivering single electrons upon addition of nicotinamide adenine dinucleotide...
The content of this RSS Feed (c) The Royal Society of Chemistry
Speciation of Be2+ in acidic liquid ammonia and formation of tetra- and octanuclear beryllium amido clusters
DOI: 10.1039/D0SC01112F, Edge Article
The hexa-μ2-amido-tetraammine-tetraberyllium compounds [Be4(NH2)6(NH3)4]X2 (X = Cl, Br, I, CN, SCN, N3) have been prepared from beryllium metal and NH4X or [Be(NH3)4]X2 in liquid ammonia at ambient temperature. The obtained...
The content of this RSS Feed (c) The Royal Society of Chemistry
Cyber security intelligence and analytics: proceedings of the 2020 International Conference on Cyber Security Intelligence and Analytics (CSIA 2020). / Zheng Xu, Reza M. Parizi, Mohammad Hammoudeh, Octavio Loyola-González, editors
Cyber security intelligence and analytics: Proceedings of the 2020 International Conference on Cyber Security Intelligence and Analytics (CSIA 2020). / Zheng Xu, Reza M. Parizi, Mohammad Hammoudeh, Octavio Loyola-González, editors
Recent advances in theoretical, applied, computational and experimental mechanics: proceedings of ICTACEM 2017 / B. N. Singh, Arnab Roy, Dipak Kumar Maiti, editors
[ASAP] Cov_FB3D: A De Novo Covalent Drug Design Protocol Integrating the BA-SAMP Strategy and Machine-Learning-Based Synthetic Tractability Evaluation
Living with hate in American politics and religion: how popular culture can defuse intractable differences / Jeffrey Israel
'NOT recommended under any circumstances': Health Ministry issues advisory on use of disinfectant on people
Several images and videos have emerged from different parts of the country where authorities are using disinfectant on people as part of the strategy against coronavirus.
The fractal organization [electronic resource] : creating enterprises of tomorrow / Pravir Malik
[ASAP] Immobilized Carbodiimide Assisted Flow Combinatorial Protocol to Facilitate Amide Coupling and Lactamization
The twins climbing Mount Everest for science, and the fractal nature of human bone
To study the biological differences brought on by space travel, NASA sent one twin into space and kept another on Earth in 2015. Now, researchers from that project are trying to replicate that work planet-side to see whether the differences in gene expression were due to extreme stress or were specific to being in space. Sarah Crespi talks with Online News Editor Catherine Matacic about a “control” study using what might be a comparably stressful experience here on Earth: climbing Mount Everest. Catherine also shares a recent study that confirmed what one reddit user posted 5 years ago: A single path stretching from southern Pakistan to northeastern Russia will take you on the longest straight-line journey on Earth, via the ocean. Finally, Sarah talks with Roland Kröger of the University of York in the United Kingdom about his group’s study published this week in Science. Using a combination of techniques usually reserved for materials science, the group explored the nanoscale arrangement of mineral in bone, looking for an explanation of the tissue’s contradictory combination of toughness and hardness. This week’s episode was edited by Podigy. Listen to previous podcasts. [Image: Human bone (20X) by Berkshire Community College Bioscience Image Library; Music: Jeffrey Cook]
Comparison of surfactant-mediated liquid chromatographic modes with sodium dodecyl sulphate for the analysis of basic drugs
DOI: 10.1039/D0AY00526F, Paper
A comprehensive overview of the performance of MLC, HSLC and MELC for the analysis of basic compounds.
To cite this article before page numbers are assigned, use the DOI form of citation above.
The content of this RSS Feed (c) The Royal Society of Chemistry
Cyclic boronates as versatile scaffolds for KPC-2 β-lactamase inhibition
DOI: 10.1039/C9MD00557A, Research Article
Mono- (vaborbactam) and bi-cyclic (taniborbactam) boronate inhibitors bind KPC-2 similarly, but the latter is essentially irreversible.
The content of this RSS Feed (c) The Royal Society of Chemistry
No spectators allowed at Hungarian GP
'We do believe that staging the event behind closed doors, which our fans can still watch on television, is preferable to not having a race at all.'
Surfactants for enhanced oil recovery applications Muhammad Sagir, Muhammad Mushtaq, M. Suleman Tahir, Muhammad Bilal Tahir, Abdul Ravoof Shaik
The Italian dictatorship : problems and perspectives in the interpretation of Mussolini and fascism / R.J.B. Bosworth
[ASAP] MALDI-2 Mass Spectrometry and Immunohistochemistry Imaging of Gb3Cer, Gb4Cer, and Further Glycosphingolipids in Human Colorectal Cancer Tissue
[ASAP] Metal–Organic Framework-Enhanced Solid-Phase Microextraction Mass Spectrometry for the Direct and Rapid Detection of Perfluorooctanoic Acid in Environmental Water Samples
[ASAP] Fold-Change Compression: An Unexplored But Correctable Quantitative Bias Caused by Nonlinear Electrospray Ionization Responses in Untargeted Metabolomics
Profile of SSI and DI Beneficiaries with Work Goals and Expectations in 2015
This brief presents an updated profile of work-oriented beneficiaries and compares them to other SSI and DI beneficiaries who are not interested in work.
Effects of sodium chloride on rheological behaviour of the gemini-like surfactants
DOI: 10.1039/D0SM00243G, Paper
Effects of NaCl on the rheological behaviour of the gemini-like surfactants and the mechanism of the effects were investigated.
The content of this RSS Feed (c) The Royal Society of Chemistry
[ASAP] Hierarchical Plasmon Resonances in Fractal Structures
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.
Reluctant warriors: Germany, Japan, and their U.S. alliance dilemma / Alexandra Sakaki, Hanns W. Maull, Kerstin Lukner, Ellis S. Krauss, Thomas U. Berger
How to be a dictator: the cult of personality in the twentieth century / Frank Dikötter
With Mamata Banerjee as CM,WB moved from one dictatorship to another: Jairam Ramesh
JSJ 364: Ember Octane with Sam Selikoff
Sponsors
- Triplebyte offers a $1000 signing bonus
- Sentry use the code “devchat” for $100 credit
- Linode
- CacheFly
Panel
- AJ O’Neal
Joined by special guest: Sam Selikoff
Episode Summary
In this episode of JavaScript Jabber, Sam Selikoff, Co-Founder at EmberMap, Inc. starts with giving a brief background about himself and his work followed by a discussion with AJ O’Neal about the Ember community. Sam mentions some of the biggest advantages in using Ember, and what it should and should not be used for. He explains the architecture of Ember apps, addresses some of the performance concerns and then dives into Octane in detail. He talks about a bunch of Ember components, compiler compatibility, relative weight of Ember apps compared to other frameworks, the underlying build system, and security considerations. Sam then helps listeners understand the usage of ES6 classes and decorators in Ember at length. At the end, they discuss component rendering and element modifiers and move onto picks.
Links
Follow JavaScript Jabber on Devchat.tv, Facebook and Twitter.
Picks
AJ O’Neal:
Sam Selikoff:
[ASAP] pH-Activated Single Molecule Conductance and Binding Mechanism of Imidazole on Gold
Association Between Genetically Proxied Inhibition of HMG-CoA Reductase and Epithelial Ovarian Cancer
This study uses mendelian randomization to estimate the associations between genetic variants related to reduced HMG-CoA reductase activity and epithelial ovarian cancer in the general population and in BRCA1/2 mutation carriers.