Это код, который я использую для записи звука:
Код: Выделить всё
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { bufferToWave } from './audio-helper'
import { RESTAPIService } from './restapiservice.service';
@Injectable({
providedIn: 'root'
})
export class AudioRecordingService {
private chunks: any[] = [];
private mediaRecorder: any;
private audioContext: AudioContext = new AudioContext();
private audioBlobSubject = new Subject();
private stream: any;
private mediaConstraints = {
audio: true
};
audioBlob$ = this.audioBlobSubject.asObservable();
constructor(private service: RESTAPIService) {
}
async startRecording() {
if (this.audioContext.state === 'suspended') {
await this.audioContext.resume();
}
this.stream = await navigator.mediaDevices.getUserMedia(this.mediaConstraints);
this.mediaRecorder = new MediaRecorder(this.stream);
this.mediaRecorder.audioChannels = 1;
this.mediaRecorder.ondataavailable = (event: any) => {
this.chunks.push(event.data);
};
this.mediaRecorder.start();
}
async stopRecording() {
if (this.mediaRecorder) {
let mimeType = this.mediaRecorder.mimeType;
this.mediaRecorder.onstop = async () => {
const audioData = await new Blob(this.chunks).arrayBuffer();
const audioBuffer = await this.audioContext.decodeAudioData(audioData);
const wavBlob = bufferToWave(audioBuffer, audioBuffer.length);
this.audioBlobSubject.next(wavBlob);
let audioBlob = new Blob(this.chunks, { type: mimeType });
await this.service.postAudio(audioBlob).subscribe(data => {
});
this.chunks = [];
};
this.mediaRecorder.stop();
if (this.stream) {
this.stream.getAudioTracks().forEach(function(track: { stop: () => void; }) {
track.stop();
});
this.stream.getVideoTracks().forEach(function(track: { stop: () => void; }) {
track.stop();
});
}
}
}
}
Код: Выделить всё
constructor(private http: HttpClient) { }
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'multipart/form-data'
})
};
postAudio(blob: Blob)
{
const formData = new FormData();
formData.append("Test", blob);
let url = "https://localhost:7048/api/Transcribe/UploadAudio";
return this.http.post(url, formData);
}
Код: Выделить всё
[HttpPost("UploadAudio")]
public async Task UploadAudio(IFormFile formFile)
{
return Ok("");
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... et-web-api
Мобильная версия