Java Microsoft异步会话转录问题:SLF4J问题+;连接问题错误11001

Java Microsoft异步会话转录问题:SLF4J问题+;连接问题错误11001,java,azure,speech-recognition,Java,Azure,Speech Recognition,我尝试从以下位置运行示例代码: 从以下位置实现帮助器类: 经过一些细微的修改,它可以读取wav文件,而不限于16kHz 16位单通道,当我运行它时,会出现以下情况: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.

我尝试从以下位置运行示例代码:

从以下位置实现帮助器类:

经过一些细微的修改,它可以读取wav文件,而不限于16kHz 16位单通道,当我运行它时,会出现以下情况:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Conversation transcriber canceled:SessionId:b2496d2c13424b3ba3138f2c8ce0893f ResultId:258796dbc69d491786f3ccdd8ec708d6 CancellationReason:Error CancellationErrorCode:ConnectionFailure Error details:<Connection failed (no connection to the remote host). Internal error: 1. Error details: 11001. Please check network connection, firewall setting, and the region name used to create speech factory. SessionId: b2496d2c13424b3ba3138f2c8ce0893f
Conversation transcriber stopped:SessionId: b2496d2c13424b3ba3138f2c8ce0893f.
SLF4J:未能加载类“org.SLF4J.impl.StaticLoggerBinder”。
SLF4J:默认为无操作(NOP)记录器实现
SLF4J:参见http://www.slf4j.org/codes.html#StaticLoggerBinder 详情请参阅。
会话转录器已取消:会话ID:b2496d2c13424b3ba3138f2c8ce0893f结果:258796dbc69d491786f3ccdd8ec708d6取消原因:错误取消错误代码:连接失败错误详细信息:{
System.out.println(“会话转录器识别:+e.toString());
});
转录器.已取消.添加的事件列表器((o,e)->{
System.out.println(“会话转录器已取消:+e.toString());
试一试{
transcriber.stopTranscribingAsync().get();
}捕获(中断异常例外){
例如printStackTrace();
}捕获(ExecutionException ex){
例如printStackTrace();
}
});
transcriber.sessionStopped.addEventListener((o,e)->{
System.out.println(“会话转录器停止:+e.toString());
试一试{
transcriber.stopTranscribingAsync().get();
}捕获(中断异常例外){
例如printStackTrace();
}捕获(ExecutionException ex){
例如printStackTrace();
}
});
//开始转录。
Future-Future=transcriber.startTranscribingAsync();
//创建远程会话转录客户端
RemoteConversationTransactionClient=新的RemoteConversationTransactionClient(speechConfig);
//获取用于远程操作的PollerFlux
PollerFlux remoteTranscriptionOperation=client.getTranscriptionOperation(会话ID);
//订阅PollerFlux以获取远程操作状态
remoteTranscriptionOperation.subscribe(
pollResponse->{
System.out.println(“轮询响应状态:+pollResponse.getStatus());
System.out.println(“轮询响应状态:+pollResponse.getValue().getServiceStatus());
}
);
//使用getSyncPoller获取阻塞操作
SyncPoller blockingOperation=remoteTranscriptionOperation.getSyncPoller();
//等待操作完成
blockingOperation.waitForCompletion();
//获取最终结果响应
RemoteConversationTransactionResult resultResponse=blockingOperation.getFinalResult();
//打印结果
if(resultResponse!=null){
if(resultResponse.GetConversationTransactionResults()!=null){
对于(int i=0;i
Helper.java:

package speechsdk.quickstart;

import com.microsoft.cognitiveservices.speech.audio.PullAudioInputStreamCallback;
import com.microsoft.cognitiveservices.speech.internal.AudioConfig;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.slf4j.*;

class   WavStream extends PullAudioInputStreamCallback {
    private final InputStream stream;
    private long samplespersecond;
    private int bitspersample;
    private int channel;

    public long getSamplespersecond()
    {
        return samplespersecond;
    }

    public int getBitspersample()
    {
        return bitspersample;
    }

    public int getChannel()
    {
        return channel;
    }

    public WavStream(InputStream wavStream) {
        try {
            this.stream = parseWavHeader(wavStream);
        } catch (Exception ex) {
            throw new IllegalArgumentException(ex.getMessage());
        }
    }

    @Override
    public int read(byte[] dataBuffer) {
        long ret = 0;

        try {
            ret = this.stream.read(dataBuffer, 0, dataBuffer.length);
        } catch (Exception ex) {
            System.out.println("Read " + ex);
        }

        return (int)Math.max(0, ret);
    }

    @Override
    public void close() {
        try {
            this.stream.close();
        } catch (IOException ex) {
            // ignored
        }
    }
    // endregion

    // region Wav File helper functions
    private int ReadInt32(InputStream inputStream) throws IOException {
        int n = 0;
        for (int i = 0; i < 4; i++) {
            n |= inputStream.read() << (i * 8);
        }
        return n;
    }

    private long ReadUInt32(InputStream inputStream) throws IOException {
        long n = 0;
        for (int i = 0; i < 4; i++) {
            n |= inputStream.read() << (i * 8);
        }
        return n;
    }

    private int ReadUInt16(InputStream inputStream) throws IOException {
        int n = 0;
        for (int i = 0; i < 2; i++) {
            n |= inputStream.read() << (i * 8);
        }
        return n;
    }

    public InputStream parseWavHeader(InputStream reader) throws IOException {
        // Note: assumption about order of chunks
        // Tag "RIFF"
        byte data[] = new byte[4];
        int numRead = reader.read(data, 0, 4);
        ThrowIfFalse((numRead == 4) && (data[0] == 'R') && (data[1] == 'I') && (data[2] == 'F') && (data[3] == 'F'), "RIFF");

        // Chunk size
        /* int fileLength = */ReadInt32(reader);

        // Subchunk, Wave Header
        // Subchunk, Format
        // Tag: "WAVE"
        numRead = reader.read(data, 0, 4);
        ThrowIfFalse((numRead == 4) && (data[0] == 'W') && (data[1] == 'A') && (data[2] == 'V') && (data[3] == 'E'), "WAVE");

        // Tag: "fmt"
        numRead = reader.read(data, 0, 4);
        ThrowIfFalse((numRead == 4) && (data[0] == 'f') && (data[1] == 'm') && (data[2] == 't') && (data[3] == ' '), "fmt ");

        // chunk format size
        long formatSize = ReadInt32(reader);
        ThrowIfFalse(formatSize >= 16, "formatSize");

        int formatTag = ReadUInt16(reader);
        int channels = ReadUInt16(reader);
        int samplesPerSec = (int) ReadUInt32(reader);
        int avgBytesPerSec = (int) ReadUInt32(reader);
        int blockAlign = ReadUInt16(reader);
        int bitsPerSample = ReadUInt16(reader);
        ThrowIfFalse(formatTag == 1, "PCM"); // PCM
        //ThrowIfFalse(channels == 1, "single channel");
        channel = channels;
        //ThrowIfFalse(samplesPerSec == 16000, "samples per second");
        samplespersecond = samplesPerSec;
        //ThrowIfFalse(bitsPerSample == 16, "bits per sample");
        bitspersample = bitsPerSample;

        // Until now we have read 16 bytes in format, the rest is cbSize and is ignored
        // for now.
        if (formatSize > 16) {
            numRead = reader.read(new byte[(int) (formatSize - 16)]);
            ThrowIfFalse(numRead == (int)(formatSize - 16), "could not skip extended format");
        }

        // Second Chunk, data
        // tag: data.
        numRead = reader.read(data, 0, 4);
        //for (byte i : data) System.out.print((char) i);
        //System.out.println();
        //ThrowIfFalse((numRead == 4) && (data[0] == 'd') && (data[1] == 'a') && (data[2] == 't') && (data[3] == 'a'), "data");

        // data chunk size
        // Note: assumption is that only a single data chunk
        /* int dataLength = */ReadInt32(reader);
        numRead = reader.read(data, 0, 4);
        while (!((numRead == 4) && (data[0] == 'd') && (data[1] == 'a') && (data[2] == 't') && (data[3] == 'a')))
        {
            numRead = reader.read(data, 0, 4);
            //for (byte i : data) System.out.print((char) i);
            //System.out.println();
            ReadInt32(reader);
        }
        //for (byte i : data) System.out.println((char) i);
        return reader;
    }

    private static void ThrowIfFalse(Boolean condition, String message) {
        if (!condition) {
            throw new IllegalArgumentException(message);
        }
    }
    // endregion
}
package speechsdk.quickstart;
导入com.microsoft.cognitiveservices.speech.audio.PullAudioInputStreamCallback;
导入com.microsoft.cognitiveservices.speech.internal.AudioConfig;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.io.InputStream;
导入org.slf4j.*;
类WavStream扩展PullAudioInputStreamCallback{
私有最终输入流;
私人长样本每秒;
私有整数位样本;
专用int通道;
公共长getSamplespersecond()
{
返回样本秒;
}
public int getBitspersample()
{
返回bitspersample;
}
public int getChannel()
{
返回通道;
}
公共WavStream(InputStream WavStream){
试一试{
this.stream=parseWavHeader(wavStream);
}捕获(例外情况除外){
抛出新的IllegalArgumentException(例如getMessage());
}
}
@凌驾
公共整型读取(字节[]数据缓冲){
长ret=0;
试一试{
ret=this.stream.read(dataBuffer,0,dataBuffer.length);
}捕获(例外情况除外){
系统输出打印项次(“读取”+ex);
}
返回(int)数学最大值(0,ret);
}
@凌驾
公众假期结束(){
试一试{
this.stream.close();
}捕获(IOEX异常){
//忽略
}
}
//端区
//区域Wav文件辅助函数
私有int ReadInt32(InputStream InputStream)引发IOException{
int n=0;
对于
package speechsdk.quickstart;

import com.microsoft.cognitiveservices.speech.audio.PullAudioInputStreamCallback;
import com.microsoft.cognitiveservices.speech.internal.AudioConfig;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.slf4j.*;

class   WavStream extends PullAudioInputStreamCallback {
    private final InputStream stream;
    private long samplespersecond;
    private int bitspersample;
    private int channel;

    public long getSamplespersecond()
    {
        return samplespersecond;
    }

    public int getBitspersample()
    {
        return bitspersample;
    }

    public int getChannel()
    {
        return channel;
    }

    public WavStream(InputStream wavStream) {
        try {
            this.stream = parseWavHeader(wavStream);
        } catch (Exception ex) {
            throw new IllegalArgumentException(ex.getMessage());
        }
    }

    @Override
    public int read(byte[] dataBuffer) {
        long ret = 0;

        try {
            ret = this.stream.read(dataBuffer, 0, dataBuffer.length);
        } catch (Exception ex) {
            System.out.println("Read " + ex);
        }

        return (int)Math.max(0, ret);
    }

    @Override
    public void close() {
        try {
            this.stream.close();
        } catch (IOException ex) {
            // ignored
        }
    }
    // endregion

    // region Wav File helper functions
    private int ReadInt32(InputStream inputStream) throws IOException {
        int n = 0;
        for (int i = 0; i < 4; i++) {
            n |= inputStream.read() << (i * 8);
        }
        return n;
    }

    private long ReadUInt32(InputStream inputStream) throws IOException {
        long n = 0;
        for (int i = 0; i < 4; i++) {
            n |= inputStream.read() << (i * 8);
        }
        return n;
    }

    private int ReadUInt16(InputStream inputStream) throws IOException {
        int n = 0;
        for (int i = 0; i < 2; i++) {
            n |= inputStream.read() << (i * 8);
        }
        return n;
    }

    public InputStream parseWavHeader(InputStream reader) throws IOException {
        // Note: assumption about order of chunks
        // Tag "RIFF"
        byte data[] = new byte[4];
        int numRead = reader.read(data, 0, 4);
        ThrowIfFalse((numRead == 4) && (data[0] == 'R') && (data[1] == 'I') && (data[2] == 'F') && (data[3] == 'F'), "RIFF");

        // Chunk size
        /* int fileLength = */ReadInt32(reader);

        // Subchunk, Wave Header
        // Subchunk, Format
        // Tag: "WAVE"
        numRead = reader.read(data, 0, 4);
        ThrowIfFalse((numRead == 4) && (data[0] == 'W') && (data[1] == 'A') && (data[2] == 'V') && (data[3] == 'E'), "WAVE");

        // Tag: "fmt"
        numRead = reader.read(data, 0, 4);
        ThrowIfFalse((numRead == 4) && (data[0] == 'f') && (data[1] == 'm') && (data[2] == 't') && (data[3] == ' '), "fmt ");

        // chunk format size
        long formatSize = ReadInt32(reader);
        ThrowIfFalse(formatSize >= 16, "formatSize");

        int formatTag = ReadUInt16(reader);
        int channels = ReadUInt16(reader);
        int samplesPerSec = (int) ReadUInt32(reader);
        int avgBytesPerSec = (int) ReadUInt32(reader);
        int blockAlign = ReadUInt16(reader);
        int bitsPerSample = ReadUInt16(reader);
        ThrowIfFalse(formatTag == 1, "PCM"); // PCM
        //ThrowIfFalse(channels == 1, "single channel");
        channel = channels;
        //ThrowIfFalse(samplesPerSec == 16000, "samples per second");
        samplespersecond = samplesPerSec;
        //ThrowIfFalse(bitsPerSample == 16, "bits per sample");
        bitspersample = bitsPerSample;

        // Until now we have read 16 bytes in format, the rest is cbSize and is ignored
        // for now.
        if (formatSize > 16) {
            numRead = reader.read(new byte[(int) (formatSize - 16)]);
            ThrowIfFalse(numRead == (int)(formatSize - 16), "could not skip extended format");
        }

        // Second Chunk, data
        // tag: data.
        numRead = reader.read(data, 0, 4);
        //for (byte i : data) System.out.print((char) i);
        //System.out.println();
        //ThrowIfFalse((numRead == 4) && (data[0] == 'd') && (data[1] == 'a') && (data[2] == 't') && (data[3] == 'a'), "data");

        // data chunk size
        // Note: assumption is that only a single data chunk
        /* int dataLength = */ReadInt32(reader);
        numRead = reader.read(data, 0, 4);
        while (!((numRead == 4) && (data[0] == 'd') && (data[1] == 'a') && (data[2] == 't') && (data[3] == 'a')))
        {
            numRead = reader.read(data, 0, 4);
            //for (byte i : data) System.out.print((char) i);
            //System.out.println();
            ReadInt32(reader);
        }
        //for (byte i : data) System.out.println((char) i);
        return reader;
    }

    private static void ThrowIfFalse(Boolean condition, String message) {
        if (!condition) {
            throw new IllegalArgumentException(message);
        }
    }
    // endregion
}
config.setProperty(PropertyId.Speech_LogFilename, "LogfilePathAndName");